剛剛開始覺得是字段類型給錯了 必須給一個默認值,然而並非php
而後綜合參考了哈網上html
連接:mysql
查看錯誤 https://www.linuxidc.com/Linux/2017-08/146204.htmlinux
Mysql如何取消嚴格模式 http://www.linuxeye.com/database/2909.htmlsql
查看錯誤數據庫
開發需求要求經過php後臺程序導入數據到mysql的某個庫的表中,可是報錯:Incorrect integer value: '' for column 'id' at row 1。同時本身在mysql5.6的數據庫的這個表中insert into 一條數據,insert into log values('','admin','31','002t'),仍是報錯出現上面一樣的錯誤。spa
解決辦法:
後來查了下MySQL的資料。發現5以上的版本若是是空值應該要寫NULL
這種問題通常mysql 5.x上出現。我用的mysql5.1
官方解釋說:得知新版本mysql對空值插入有"bug",要在安裝mysql的時候去除默認勾選的enable strict SQL moderest
同時我線上的mysql數據庫的版本爲mysql5.6.20.
因而找到一文檔:htm
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_TABLESblog
同時在/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
mysql> SELECT @@GLOBAL.sql_mode;
+--------------------------------------------+
| @@GLOBAL.sql_mode |
+--------------------------------------------+
| NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
此時開發再次導入數據到後臺,再也不報錯。
取消嚴格模式
方法1、修改my.cnf 一、設置啓動參數,將默認sql_mode改成寬鬆模式 使用命令: echo sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION /etc/my.cnf 或手動修改: vi /etc/my.cnf 找到sql-mode關鍵字,若沒有,
echo "sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" >> /etc/my.cnf
service mysqld restart
sed -i "s#\"\$\*\"#--sql-mode=\"NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\"#" /etc/init.d/mysqld
service mysqld restart