问题标签 [max-allowed-packet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - MySQL 抱怨 max_allowed_packet 违规,查询短于允许的限制
执行多插入查询时,我收到错误“SQLSTATE [08S01]:通信链路故障:1153 获得的数据包大于 'max_allowed_packet' 字节”。我有一个复杂的类,它组成了多插入查询,彻底检查了限制,所以这真的很奇怪,但是,我们都是人类,所以在尝试找到问题后,我刚刚捕获并记录了异常详细信息并且可以不明白发生了什么。代码(PHP 7.4、PDO、MariaDB 10.5.10):
我得到的是:
所以我发送的查询实际上比限制少了 7 个字节。但是问题被稳定地重现了。是什么原因造成的?可能有一些标题与查询或任何东西一起发送,但我如何确定它们的大小?我在 MySQL 和 MariaDB 文档中都没有找到任何关于它的信息。
text - MySql/MariaDB longtext 被截断和 max_allowed_packet
我对带有长文本字段的 MariaDB 有疑问。它仅限于 32770 个字符,并且无法将其放大。
SELECT CHAR_LENGTH(longtext_column) from table where id = x;
我像这样编辑了我的cnf:
我确认可以运行此查询:
无论如何,我运行一个超过 32770 个字符的更新查询,并且总是将文本截断为 32770。
另一方面,我在官方文档中将其标记为:
如果值包含多字节字符,则有效最大长度会更小。LONGTEXT 列的有效最大长度还取决于客户端/服务器协议中配置的最大数据包大小和可用内存。
最后,也许有用的信息:
- 我尝试存储的字符串是 JSON。
- 我在另一台服务器上尝试了相同的结果。
- 我正在运行 Navicat 来运行这些查询。
我错过了什么?
Edit1:我从来没有得到MySQL Error 1153 - Got a packet bigger than 'max_allowed_packet' bytes
错误。
编辑 2:MySql 版本 15.1 Distrib 10.3.31-MariaDB
编辑 3:SHOW CREATE TABLE tbl_name
命令文本(缩短为相关字段):
Edit4:我上传了一个用于测试 de 32KB 限制的 MySql 脚本。