生活如麻 发表于 2016-10-23 02:00:07

mysql sql_mode 在SQLyog UI工具中失效的原因和解决办法

  问题详细说明:
  
  http://www.webyog.com/forums/index.php?showtopic=2416
  
  
  
  解决办法:
  用SQLyog 工具连接数据库后,
  在Query中,执行如下的SQL。
  
  set sql_mode=
"STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE"
  即可。
  
  注意:每次断开后,就要重新执行上面的SQL,才能使sql_mode模式生效。
  
  另外需要注意的是Sql_mode要在my.ini(或者my.conf)文件中设置,才能起作用
  In our my.cnf file we have set the sql_mode to ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE
  问题产生的原因是:
  现在有一张表
  create table a (a int );
  insert into a values(1000);
  这样插入是没有问题的。
  如果在my.ini文件里没有配置sql_mode =ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE
  
  insert into a values('ttttt');
  这样也会将数据插入到表a中,同时会有警告显示。
  数据显示为:
  a
  ----------
  1000
  0
  ------------
  ttt 字符类型变成了0!!!
  很显然,这个是不符合我们的要求的。
  所以在my.ini 配置文件中要设置
  sql_mode =ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE
  这样一来
  insert into a values('ttttt');
  就会显示Error,数据就不会插入到表 a中。
  
  
  只要是在my.ini 配置文件中设置了sql_mode,在mysql 自带的客户端和Toad for mysql客户端中,都不会出现。
  而在SQLyog UI工具中就会失效,插入
  insert into a values('ttttt');依旧可以插入。
  所以必须像上面的解决办法里面说的
  手工设置
  set sql_mode=
"STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE"
页: [1]
查看完整版本: mysql sql_mode 在SQLyog UI工具中失效的原因和解决办法