码迷,mamicode.com
首页 > 数据库 > 详细

mysql的sql_mode模式

时间:2018-01-18 00:50:38      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:一段   ref   sub   dev   acl   oracl   engine   visio   for   

在oracle或sqlserver中,如果某个表的字段设置成not null,insert或update时不给这个字段赋值,比如下面这样:

表t_test(id,name)中id,name都不允许为空,

insert into t_test(name) values(‘xxx‘) 必然报错,这是天经地义的事情,但是在mysql中这是有可能成功,具体取决于sql_mode的设置

 

大概上讲,sql_mode可以分为二大类:

一类是所谓的宽松无敌模式(my.ini中sql_mode设置为空或仅NO_ENGINE_SUBSTITUTION), 这种模式下,not null 的字段,在insert或update时不设置值也能成功,db在插入时,会自动给默认值,比如int会给0值,甚至可以把abc赋值给int型的字段(当然,db会自动忽略该值,变成默认值0)

 

另一类的是所谓的严格模式(具体有很多可选值),设置成严格模式后,mysql就跟传统的oracle、sqlserver表现一致了,这也是我个人强烈推荐的模式。

 

最后,无耻的从网上抄一段贴在这里备份:

 

如果使用mysql,为了继续保留大家使用oracle的习惯,可以对mysql的sql_mode设置如下:
 
在my.cnf添加如下配置
[mysqld]
sql_mode=‘ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES‘
 
 

参考:

http://www.2cto.com/database/201304/202192.html

http://dev.mysql.com/doc/refman/5.5/en/sql-mode.html

mysql的sql_mode模式

标签:一段   ref   sub   dev   acl   oracl   engine   visio   for   

原文地址:https://www.cnblogs.com/exmyth/p/8306638.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!