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