原创

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),回复关键词领取资料:如Mysql、Hadoop、Dubbo、Spring Boot等,免费领取视频教程、资料文档和项目源码。

Java精选专注程序员推送一些Java开发知识,包括基础知识、各大流行框架(Mybatis、Spring、Spring Boot等)、大数据技术(Storm、Hadoop、MapReduce、Spark等)、数据库(Mysql、Oracle、NoSQL等)、算法与数据结构、面试专题、面试技巧经验、职业规划以及优质开源项目等。其中一部分由小编总结整理,另一部分来源于网络上优质资源,希望对大家的学习和工作有所帮助。

评论

分享:

支付宝

微信