mysql的sql_mode模式

來源:互聯網
上載者:User

標籤:一段   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)

 

另一類的是所謂的strict 模式(具體有很多可選值),設定成strict 模式後,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模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.