mysql數據類型字段插入空字符串自動填充爲0報錯

有一條這樣的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

NULL 和 NOT NULL 修飾符:
能夠在每一個字段後面都加上這NULL 或 NOT NULL 修飾符來指定該字段是否能夠爲空(NULL),仍是說必須填上數據(NOT NULL)。MySQL默認狀況下指定字段爲NULL修飾符,若是一個字段指定爲NOT NULL,MySQL則不容許向該字段插入空值(這裏面說的空值都爲NULL),由於這是「規定」。
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"

 

相關文章
相關標籤/搜索