MySQL遇到问题

1、在开发中遇到一个BUG,无法有效编辑,分析查看日志后发现,MySQL报错:Truncated incorrect DOUBLE value: 'xxx'

检查后发现sql语法并没有问题,怀疑是字段类型的问题

执行的sql为

UPDATE info SET STATE=1 WHERE STATE<>1

果然,检查表结构后发现state字段为varchar类型,where条件后的STATE<>1将1当做int类型使用,所以报错。正确的写法应该为 

   

sqlStateCond := []string{"STATE like '%" + state + "%'"}

UPDATE info SET STATE='1' WHERE STATE<>'1‘

2、遇到问题

[Err] 1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'CREATE_TIME' at row 1

 发现跟数据库的模式有关系

    当前的MySQL不支持datetime为0的情况

解决方案:修改sql_mode

      查看sql_mode:

select @@global.sql_mode;

  可以看到,O_ZERO_DATE、NO_ZERO_IN_DATE

      修改全局sql_mode:

set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

  这时问题解决,然而一旦MySQL重启,就必须重新设置一次全局和当前的sql_mode。

修改sql_mode配置

在MySQL配置文件mysql.ini中修改sql_mode配置,就不需要每次重启MySQL就得重新设置sql_mode了。

  • 关闭MySQL
net stop MySQL57

  

  • 修改MySQL配置
    在my.ini的[mysqld]下添加:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

  

  • 启动MySQL
net start MySQL57

  

posted @ 2020-10-16 10:06  布尔先生  阅读(133)  评论(0编辑  收藏  举报