有一條這樣的sql語句,mysql
insert into a(id,user_name) values('','abc'); 程序員
表示插入字段的時候ID插入是空字符串。這樣的狀況在mysql5.6版本上執行報錯。在mysql5.1版本執行能夠成功,sql
mysql的老版本能夠支持數據類型空值,5.2之後的估計是不行了。數據結構
爲何不寫空字符串不能寫null?.net
這是由於mysql受到了字段類型的約束,設置爲not null 了blog
not null 表示這個字段不能爲空
雖然看起來他是人爲設置的 可是他和業務邏輯或者數據結構有關係
好比你要對這條記錄進行讀取 而這個是很重要的屬性 那麼你不只要讓其不爲空 還要讓他是指定的格式或者數值
還有狀況就是 這個字段恰是其餘表的主鍵 那麼只有他有值才能正確關聯兩張表 因此他必須有值
因此沒辦法程序員只好改了程序,把這個字段給去掉了。。。-_-_-字符串
這種問題通常mysql 5.x上出現。我用的mysql5.2.28,後面查詢得知新版本mysql對空值會報錯,要在安裝mysql的時候去除默認勾選的enable strict SQL mode。若是已經安裝好了的,就在my.ini中查找sql-mode,默認爲sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",將其修改成sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",重啓mysql後便可。get
第一時間的反應是跟mysql5.0新加的sql-mode有關係,由於前一陣子剛剛看過手冊.果真,做了以下更改後就再也不提示了.it
修改 my.ini 文件.class
# Set the SQL mode to strict
sql-mode=」STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION」
改成:
# Set the SQL mode to strict
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"