peibaishi 发表于 2018-10-20 08:42:24

mysql5.6.20数据库sql_mode模式设置

  开发需求要求通过php后台程序导入数据到mysql的某个库的表中,但是报错:Incorrect integer value: '' for column 'id' at row 1。同时自己在mysql5.6的数据库的这个表中insert into 一条数据,insert into log values('','admin','31','002t'),还是报错出现上面同样的错误。
  于是网上百度找到解决办法:
  参考资料:http://blog.csdn.net/j2eelamp/article/details/6866614
  解决办法:
  后来查了下MySQL的资料。发现5以上的版本如果是空值应该要写NULL
  这种问题一般mysql 5.x上出现。我用的mysql5.1
  官方解释说:得知新版本mysql对空值插入有"bug",要在安装mysql的时候去除默认勾选的enable strict SQL mode
  同时我线上的mysql数据库的版本为mysql5.6.20.
  于是找到一文档:
  mysql5.6 sql_mode设置
  参考资料:
  由于数据人员的需求,现在需要修改mysql的sql_mode
  sql_mode默认是sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  这时候我在/etc/my.cnf配置如下
  sql_mode=NO_ENGINE_SUBSTITUTION
  重启后还是
  mysql> SELECT @@GLOBAL.sql_mode;
  +--------------------------------------------+
  | @@GLOBAL.sql_mode |
  +--------------------------------------------+
  | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
  +--------------------------------------------+
  1 row in set (0.00 sec)
  这是因为我编译安装的目录下面有一个文件叫my.cnf,然而这个文件里有sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 这一项
  把这个my.cnfmv my.cnf my.cnf.ori
  grep sql_mode /usr/local/mysql/my.cnf.ori
  sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  同时在/etc/my.cnf 文件中设置:
  sql_mode= NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION
  grep "sql_mode" /etc/my.cnf
  sql_mode=NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION
  再重启mysql
  mysql> SELECT @@GLOBAL.sql_mode;
  +--------------------------------------------+
  | @@GLOBAL.sql_mode                        |
  +--------------------------------------------+
  | NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
  +--------------------------------------------+
  此时开发再次导入数据到后台,不再报错。

页: [1]
查看完整版本: mysql5.6.20数据库sql_mode模式设置