在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