天天看點

mysql5.6.20資料庫sql_mode模式設定

開發需求要求通過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