來自:http://hi.baidu.com/eason_fun/blog/item/f2844a99af3258066e068c86.html
最近新項目用PHP+MYSQL,N久沒碰過這兩玩意兒了,結果鬧出不小的問題。某個資料庫插入操作,echo出來的SQL直接copy到MYSQL Manager裡面執行,worked~但在頁面上就是不執行Insert操作,輸出 Mysql_error() ,是一個1364的錯誤。查了半天,結果如下:
MySQL 1364 錯誤提示:#1364 - Field "details" doesn't have a default value。
大概意思是:details欄位沒有預設的數值;也就是說我們沒有為其分配數值,而表中此欄位也沒有設定預設值。
這是MySQL5出來後搞出來的東東,認真看一下my.ini檔案中有這樣一段: my.ini中相關代碼 # Set the SQL mode to strict # sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
假如您無法看到my.ini,你可以執行以下SQL命令。 SQL代碼 SELECT @@GLOBAL.sql_mode;
您可能一下子就注意到:STRICT_TRANS_TABLES(儲存引擎啟用strict 模式,非法資料值被拒絕)。這也就是為什麼我們插 入資料時返回1364的原因:details欄位沒有設定預設值。
解決辦法有兩種:
第一種:資料庫設計時,為可能沒有資料的欄位設定預設值。
第二種:設定SQL的模式,此有兩種方法:
(1),配置my.ini,去掉:STRICT_TRANS_TABLES 重新啟動mysql服務 my.ini配置代碼 # Set the SQL mode to strict # sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
(2),運行SQL命令。註:此命令需要許可權! SQL代碼 SET @@GLOBAL.sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";