#问题
对定义了ctime为not null的表,insert ctime null
在开发环境可以通过,但是部署上线出问题了,提示
ERROR 1048 (23000): Column ‘ctime’ cannot be null
#分析
Dev env: Mysql 5.6.30
Online env: Mysql 5.7.10
- 对比表结构
- 对比执行sql
- 考虑可配置参数
解决方案
-
表结构一样
-
查看关于insert syntax的文档
http://dev.mysql.com/doc/refman/5.7/en/insert.html
(doc version 5.7)
定义 not null 的字段,insert null 分两种情况:
- 单行会报错,1048错误;
- 多行会忽略,如果是时间字段,会插入 ‘0000-00-00 00:00:00’
-
按照https://mariadb.com/kb/en/mariadb/null-values/的解释
对于 AUTO_INCREMENT, TIMESTAMP and virtual columns类型字段,insert null会特殊处理,其他的情况符合2的说明。 -
可以影响提示的参数是sql_mod
http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
可以查看SQL Mode Chan