zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    STL(五)list
    WinCE进程ID获取窗口句柄
    【转】.obj, .lib, .dll, .exe的关系
    《Windows核心编程》——线程
    【转】windows结束线程方式
    VS2005调试多进程
    【转】VC中常用的宏
    【转】C++标准库简介
    WinCE下用STL的奇怪问题
    STL(三)string
  • 原文地址:https://www.cnblogs.com/lvpengbo/p/13824905.html
Copyright © 2011-2022 走看看