1406: Data too long for column(列的数据过长)
MySQL含义
写入的值长度超过了列定义的最大长度。例如,20 个字符的字符串放不进 VARCHAR(10) 列。
原因
列宽对数据来说过小;多字节字符集(utf8mb4)中的字符占用空间超出预期;拼接结果变长;启用了严格 SQL 模式(否则值会被静默截断)。
解决方法
加宽列:ALTER TABLE my_table MODIFY my_column VARCHAR(255); 对于非常长的内容,考虑使用 TEXT 类型。如果必须缩短值,在应用中或用 SUBSTRING 截取。找出溢出的行:SELECT * FROM my_table WHERE CHAR_LENGTH(my_column) > 10; 添加输入校验。
同一数据库的其他条目
- 1136Column count doesn't match value count(列数与值数不匹配)
- 1048Column 'x' cannot be null(列 'x' 不能为 null)
- 1292Incorrect datetime value / truncated incorrect value(日期时间值不正确 / 截断了不正确的值)
- 1071Specified key was too long; max key length is 767 bytes(指定的键过长;最大键长度为 767 字节)
- 1050Table already exists(表已存在)
- 1051Unknown table 'x'(未知表 'x')
- 1091Can't DROP 'x'; check that column/key exists(无法 DROP 'x';请检查该列/键是否存在)