sql_mode引发的数据库问题

  前几天,在本地做完项目,测试完毕后,上传到线上服务器的时候,在做很多写入数据库的操作时,发现全部发生500报错,返回的报错信息是,某个字段没有默认值,写入的时候没有添加这个字段,该字段在数据表中是NOT NULL并且无默认值,导致插入失败。

  查询原因是从本地上传服务器项目时,服务器数据库由原来的5.6升级为5.7,mysql配置文件中的sql_mode配置中STRICT_TRANS_TABLES这个配置在限制写入库。

  STRICT_TRANS_TABLES(存储引擎启用严格模式,非法数据值被拒绝)

  启用这个就会报错,所以修改sql_mode去掉STRICT_TRANS_TABLES,测试了一下恢复正常。

  先在数据库查询sql_mode:

SELECT @@GLOBAL.sql_mode;

  发现sql_mode中含有STRICT_TRANS_TABLES。

  然后在自己的服务器中打开mysql.conf(泛指数据库配置文件)加入下面这一行:

sql_mode='NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

  总结:在设计数据库的时候,要严谨添加字段,如果设置某个字段不为null时,要给该字段添加上默认值,这样也不会发生写入的时候报错的问题。

  by as

原文地址:https://www.cnblogs.com/widgetbox/p/9394495.html