開發需求要求通過php背景程式導入資料到mysql的某個庫的表中,但是報錯:Incorrect integer value: '' for column 'id' at row 1。同時自己在mysql5.6的資料庫的這個表中insert into 一條資料,insert into log values('','admin','31','002t'),還是報錯出現上面同樣的錯誤。
于是網上百度找到解決辦法:
參考資料:http://blog.csdn.net/j2eelamp/article/details/6866614
解決辦法:
後來查了下MySQL的資料。發現5以上的版本如果是空值應該要寫NULL
這種問題一般mysql 5.x上出現。我用的mysql5.1
官方解釋說:得知新版本mysql對空值插入有"bug",要在安裝mysql的時候去除預設勾選的enable strict SQL mode
同時我線上的mysql資料庫的版本為mysql5.6.20.
于是找到一文檔:
mysql5.6 sql_mode設定
參考資料:
由于資料人員的需求,現在需要修改mysql的sql_mode
sql_mode預設是sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
這時候我在/etc/my.cnf配置如下
sql_mode=NO_ENGINE_SUBSTITUTION
重新開機後還是
mysql> SELECT @@GLOBAL.sql_mode;
+--------------------------------------------+
| @@GLOBAL.sql_mode |
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
1 row in set (0.00 sec)
這是因為我編譯安裝的目錄下面有一個檔案叫my.cnf,然而這個檔案裡有sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 這一項
把這個my.cnf mv my.cnf my.cnf.ori
grep sql_mode /usr/local/mysql/my.cnf.ori
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
同時在/etc/my.cnf 檔案中設定:
sql_mode= NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION
grep "sql_mode" /etc/my.cnf
sql_mode=NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION
再重新開機mysql
| @@GLOBAL.sql_mode |
| NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
此時開發再次導入資料到背景,不再報錯。
本文轉自 wjw555 51CTO部落格,原文連結:http://blog.51cto.com/wujianwei/1947326