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"

你可能感兴趣的:(sql,UI,mysql,PHP)