mysql 1301_sql错误1301 Result of CONCAT() was larger than max_allowed_packet(1024)-truncated

问题描述:

0818b9ca8b590ca3270a3433284dd417.png

sql错误1301

问题描述,CONCAT拼接JSON长字符串失败。注,括号内数字可变,为你的当前设置(估计是我这个版本的mysql默认值)

脑残解决方法:一个CONCAT()内不放太多参数

脑残原因:限制的是最终字符串长度,只要目标字符串不变,都会超长。

原因解析:参数——“包裹”大小——设置短了

首先是sql语句查看该参数

show VARIABLES like '%max_allowed_packet%';

我的是1024

解决方法:直接用sql命令修改:

set global max_allowed_packet = 25600;

show VARIABLES like '%max_allowed_packet%';

还是不对!

需要

重启mysqld服务

(任何小改动都可能需要重启,要养成习惯,下意识想起来自己还没重启服务),去linux 命令行完成

#/etc/init.d/mysqld restart

修改成功

使用concat()拼接字符串成功

根据一个从1048576改到2*1024*1024*10的例子,还有4194304的,本例也不显大吧

移动流量也一般,如果要显示这么多数据,本例是显示好友图片说说列表,以及被赞情况,既然要显示那么多人,分次交互和单次交互都刷流量,而且远没有图片流量大。

其次,这个限制和流量没有必然关系,首先是服务器的逻辑,抛出服务器的逻辑,这个也不代表包就那么大,这只是什么最大缓存之类的吧?和服务器端CPU、内存的性能反倒可能有点联系。

但是片面调大是不是有数据库变慢的影响呢?至少要注意,测试服务器搬到正式服务器的话,正式服务器要同步修改mysql这个限制,反正就是很多设置得同步,不然麻烦多,还不容易发现

另外,还有个slave_max_allowed_packet,不知何用

0818b9ca8b590ca3270a3433284dd417.png

还有

# join_buffer_size = 128M

# sort_buffer_size = 2M

# read_rnd_buffer_size = 2M

等,或许,这个和通信流量有关?不过都注释掉了,未生效

最新:

第一种方法出现了反复,并且再设置后重启mysqld,max_allowed_packet也不是自己用set语句设置的25600,而是4194304,同步了正式服务器的设置,所以两个服务器一定是使用某种配置文件完成的,但是本例确实不是/etc/my.cnf。

最终解决问题的方法:

倾向于用/etc/my.cnf配置文件直接写入

0818b9ca8b590ca3270a3433284dd417.png

max_allowed_packet = 25600

0818b9ca8b590ca3270a3433284dd417.png 完成设置

重启/etc/init.d/mysqld

设置成功:

0818b9ca8b590ca3270a3433284dd417.png

但是25600也不大,会有其他方面的隐患,不差资源的话多设置点吧,多加俩0什么的,参考上边的例子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值