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命令。