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


有一條這樣的sql語句,

insert into a(id,user_name) values('','abc'); 

表示插入字段的時候ID插入是空字符串。這樣的情況在mysql5.6版本上執行報錯。在mysql5.1版本執行可以成功,

mysql的老版本可以支持數據類型空值,5.2以后的估計是不行了。

為什么不寫空字符串不能寫null?

這是因為mysql受到了字段類型的約束,設置為not null 了

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后即可。

第一時間的反應是跟mysql5.0新加的sql-mode有關系,因為前一陣子剛剛看過手冊.果然,作了如下更改后就不再提示了.

修改 my.ini 文件.

# 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"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM