原创

MYSQL 报 Data truncation: Data too long for column 错误

        MySQL是一个关系型数据库管理系统,MySQL 提供了8个基本的字符串类型(其他类型下文不讲解,暂介绍),分别:CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 各SET等多种字符串类型。


可以存储的范围从简单的一个字符到巨大的文本块或二进制字符串数据,具体信息如下:

字符串类型     字节大小         描述及存储需求
CHAR         0-255字节          定长字符串 
VARCHAR      0-255字节          变长字符串 
TINYBLOB     0-255字节        不超过 255 个字符的二进制字符串 
TINYTEXT     0-255字节        短文本字符串 
BLOB         0-65535字节      二进制形式的长文本数据 
TEXT         0-65535字节      长文本数据 
MEDIUMBLOB   0-16 777 215字节 二进制形式的中等长度文本数据 
MEDIUMTEXT   0-16 777 215字节 中等长度文本数据 
LOGNGBLOB    0-4 294 967 295字节 二进制形式的极大文本数据 
LONGTEXT     0-4 294 967 295字节 极大文本数据
VARBINARY(M)                   允许长度0-M个字节的定长字节符串,值的长度+1个字节
BINARY(M)    M                 允许长度0-M个字节的定长字节符串

在使用 TEXT 类型插入 2M 大小的文本数据,报如下信息:

2015-11-03 10:38:33 ERROR: Data truncation: Data too long for column 'content'


使用 LONGTEXT 类型之后还是报上述错误,原因是 max_allowed_packet 参数值太小导致,具体解决步骤如下:

方式1:执行 show variables like 'max_allo%' 命令,结果小于 2M,再执行 set global max_allowed_packet = 10M; 不用重启 mysql 数据库


方式2:执行 find / -name my.cnf 修改配置文件,在 [mysqld] 下面增加 max_allowed_packet = 10M;具体修改配置文件如下:

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8
[mysqld]
max_allowed_packet = 10M;
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

重启 mysql 数据库,执行 service mysql restart命令。

关注下方微信公众号“Java精选”(w_z90110),回复关键字领取资料:如HadoopDubboCAS源码等等,免费领取资料视频和项目。 

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

评论

分享:

支付宝

微信