1364: Field 'name' doesn't have a default value(字段 'name' 没有默认值)
MySQL含义
插入的行没有为定义为 NOT NULL 且无 DEFAULT 的列提供值。在严格 SQL 模式下,MySQL 无法自动填充缺失的必填列,因此报错。
原因
INSERT 中遗漏了必填(NOT NULL、无 DEFAULT)列,且 sql_mode 中启用了 STRICT_TRANS_TABLES/STRICT_ALL_TABLES。为旧的宽松模式编写的应用迁移到启用严格模式的服务器上时会遇到此错误。
解决方法
在 INSERT 中为缺失的列添加值,或在该列上定义合理的 DEFAULT:ALTER TABLE my_table MODIFY my_column ... NOT NULL DEFAULT 'value'; 如果该列确实是可选的,允许 NULL。可以放宽 sql_mode 作为临时/兼容性的权宜之计,但为保证数据质量,建议保持严格模式。
同一数据库的其他条目
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text(无效的 JSON 文本)
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value(表中没有对应该值的分区)
- 1049Unknown database 'name'(未知数据库 'name')
- 1206The total number of locks exceeds the lock table size(锁的总数超过了锁表大小)
- 1236Got fatal error 1236 from master when reading data from binary log(从 master 读取二进制日志数据时收到致命错误 1236)
- 1129Host 'host' is blocked because of many connection errors(主机 'host' 因连接错误过多而被阻止)
- 1194Table 'name' is marked as crashed and should be repaired(表 'name' 被标记为已崩溃,应当修复)