问题详细说明:
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"