mysql: Packet for query is too large 和Data too long for column

今天在用mysql开发项目的时候,用BLOB字段存储文件二进制流。


一、先是报异常

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'title' at row 1

发现上传的文件大于65535字符(mysql在UTF-8编码下汉字也是一个字符,跟oracle一个汉字3个字符不一样)

用 show full fields from table_name; 查询的collation字段可以看到当前表的字符集。


一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。(0.06 M兆)

MEDIUMBLOB 
MEDIUMTEXT 
一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。 (16M)

LONGBLOB 
LONGTEXT 
一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。(4G)


                     最后修改为LONGBLOB 解决第一个问题。


二、max_allowed_packet设置及问题

报的异常:com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1521830 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable

mysql根据配置文件会限制server接受的数据包大小。
有时候大的插入和更新会被max_allowed_packet 参数限制掉,导致失败。
根据show VARIABLES like '%max_allowed_packet%'; 查询value值(字节)

解决方法,在my.ini里的[mysqld]增加如下部分 
[mysqld] 
max_allowed_packet=64M

注意,在[client]和[mysql]部分增加无效,那个是客户端读取的参数。

然后一定记住重启MYSQL服务(不是终端),使用net stop mysql + net start mysql  或者 cmd->services.msc重启MYSQL服务,这里仅限于Windows




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值