原因:5.7以上版本数据库操作默认为严格模式,也就是哪怕设置了default值,该字段为not null。操作数据库为null时,也不会走default,会直接报错不可为空。
解决方式:
1.在mysql启动的配置文件中加上下面两句话:
explicit_defaults_for_timestamp=0
sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
2.直接运行数据库指令(重启mysql后失效)
要加global 这样会全局生效,,但不是永久生效,重启mysql服务会失效。不加global 只会当前会话生效。 set global sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; set global explicit_defaults_for_timestamp=0;