SQL修改字段长度导致截断_通过ALTER TABLE扩大定义范围

张开发
2026/4/8 13:44:29 15 分钟阅读

分享文章

SQL修改字段长度导致截断_通过ALTER TABLE扩大定义范围
不会静默截断缩小长度会报错ERROR 1406扩大长度不截断旧数据但需注意字符集变更可能导致行大小超限或隐式截断。ALTER TABLE MODIFY 会静默截断数据吗不会自动截断但如果你用 MODIFY 或 CHANGE 缩小字段长度比如从 VARCHAR(200) 改成 VARCHAR(50)MySQL 会直接报错ERROR 1406: Data too long for column除非 SQL mode 关掉了严格模式。而“扩大长度”本身是安全操作——只是要注意它不修复已存在的超长数据。扩大 VARCHAR 长度后旧数据会被截断吗不会。只要新长度 ≥ 原始数据最大字节数所有现有值都完整保留。但这里有个关键陷阱VARCHAR(N) 的 N 是字符数不是字节数如果用了 utf8mb4一个 emoji 占 4 字节但只算 1 个字符。所以ALTER TABLE t MODIFY c VARCHAR(100) CHARSET utf8mb4 能存下 100 个中文或 emoji但最多占用 400 字节如果原来字段是 VARCHAR(100) CHARSET latin1改完 utf8mb4 后同样 100 字符可能超出行大小限制InnoDB 单行上限约 65535 字节某些老版本 MySQL如 5.6在修改 charset length 时会先尝试转换再校验可能触发隐式截断尤其开启 STRICT_TRANS_TABLES 以外的 modeALTER TABLE CHANGE 和 MODIFY 有什么实际区别对长度调整来说行为一致区别只在是否重命名字段 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手依托大模型帮助用户记录、整理和分析音视频内容体验用大模型做音视频笔记、整理会议记录。

更多文章