mysql的sql_mode
之前遇到過一個問題,就是同樣的sql insert語句,在我的環境就執行不成功,在別人環境可以執行成功,而且我們的表結構是一樣的!!!
這個問題一看上去很詭異,但是仔細地看報出的錯誤,原來是我的環境裡面某些欄位不能為null,但是sql語句裡面卻沒有為這些欄位提供預設值。
最後從網上找到了這個問題的解決辦法,原來是和mysql的sql_mode有關。
檢視當前資料庫使用的sql_mode
上面檢視的是全域性情況下的sql_mode,也可以檢視其它環境下的,如下面所示:
查詢session變數 mysql> select @@session.sql_mode; 查詢使用者變數 mysql> select @sql_mode; 查詢全域性變數 mysql> select @@sql_mode;
sql_mode有很多取值,具體可以看ofollow,noindex" target="_blank">官方文件
sql_mode的STRICT_TRANS_TABLES
是嚴格模式
,進行資料的嚴格校驗,錯誤資料不能插入,報error錯誤。
要解決文字開頭的問題,可以去掉STRICT_TRANS_TABLES
限制
設定session變數: mysql> set sql_mode='NO_ENGINE_SUBSTITUTION'; Query OK, 0 rows affected (0.00 sec) 設定使用者變數: mysql> set @sql_mode='NO_ENGINE_SUBSTITUTION'; Query OK, 0 rows affected (0.00 sec) 設定全域性變數: mysql> set @@sql_mode='NO_ENGINE_SUBSTITUTION'; Query OK, 0 rows affected (0.00 sec)
也可以修改mysql的配置檔案my.cnf
來達到全域性修改的目的,具體操作如下:
vi /etc/my.cnf
在[mysqld]下面新增如下列:
sql_mode=NO_ENGINE_SUBSTITUTION