MySQL Error 2013查询断连及VARCHAR长度设置异常求助
我来帮你一步步排查这两个问题,先从VARCHAR字段长度无法设置超过45字符的问题入手,再解决连接超时的错误:
一、VARCHAR字段长度无法设置超过45字符的排查方案
1. 优先用SQL语句直接修改,排除Workbench界面bug
MySQL Workbench 6.3 CE是比较老的版本,偶尔会出现界面操作不生效的情况。你可以跳过界面,直接执行SQL语句来修改字段长度:
ALTER TABLE `你的表名` MODIFY COLUMN `目标VARCHAR字段名` VARCHAR(70);
执行这条语句后,如果提示Query OK,那就是Workbench的界面问题,建议后续用SQL语句操作,或者考虑升级到更新的Workbench版本。
2. 检查表的字符集和行总长度限制
InnoDB引擎的表有默认行大小限制(65535字节),不过VARCHAR(70)哪怕用utf8mb4(每个字符占4字节),也才280字节,远低于限制。你可以先查看表的字符集配置:
SHOW CREATE TABLE `你的表名`;
看输出里的CHARSET字段,如果是utf8mb4或其他常见字符集,都不会有问题。如果表中有大量其他字段,你可以算一下所有字段的总字节数是否超过65535,但这种情况很少见。
3. 排查是否有触发器或约束干扰
有些表可能存在触发器、外键约束或者其他自定义规则,导致字段长度修改失败。你可以查看表的触发器:
SHOW TRIGGERS LIKE '你的表名';
如果有相关触发器,可以先临时禁用,修改字段后再恢复。
二、Error 2013: Lost connection to MySQL server during query的解决方法
这个错误通常和连接超时、数据包过大或网络不稳定有关,结合你用Python写入数据的场景,试试这些方案:
1. 调整MySQL服务器的超时和数据包参数
修改MySQL的配置文件(Linux是/etc/my.cnf,Windows是my.ini),添加或修改以下参数:
# 延长连接超时时间 wait_timeout = 28800 interactive_timeout = 28800 # 调大允许的数据包大小,避免大数据写入时断开 max_allowed_packet = 64M
修改后重启MySQL服务,让参数生效。
2. 在Python连接中设置超时参数
不管你用mysql-connector-python还是pymysql,都可以在连接时显式设置连接和读取超时,避免长时间无响应导致断开:
以pymysql为例:
import pymysql conn = pymysql.connect( host="你的数据库地址", user="用户名", password="密码", database="你的数据库名", connect_timeout=30, # 连接超时时间(秒) read_timeout=60 # 读取数据超时时间(秒) )
3. 优化Python写入逻辑,避免单次操作耗时过长
如果是批量写入数据,不要一次性插入几千上万条,分批次处理(比如每次插入1000条),减少单次查询的执行时间,降低超时概率。
4. 检查网络稳定性
如果是远程连接MySQL,试试本地连接测试(比如在MySQL服务器上直接用Workbench连接),如果本地连接没问题,那大概率是网络问题,比如防火墙限制、路由器丢包等,需要排查网络环境。
内容的提问来源于stack exchange,提问作者puppet




