mysql error 1406 Data too long for column... 的問題

2015052311:41

mysql 5.6

遇到這個問題
Error Number: 1406</p><p>Data too long for column 'referer' at row 1.....
意思是說要寫入 referer 這個欄位的資料過長 (超過原 referer 的欄位長度)
(過去 mysql 會自動截掉過長的資料 再存入 referer 欄位中)

這個問題出在 sql_mode 這項設定


mysql> show variables like 'sql_mode';
+---------------+--------------------------------------------+
| Variable_name | Value                                      |
+---------------+--------------------------------------------+
| sql_mode      | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+


mysql> SET @@global.sql_mode= 'NO_ENGINE_SUBSTITUTION';    重設 sql_mode 拿掉 STRICT_TRANS_TABLES 這一項即可


另外
在 /etc/my.cnf 中設定
sql_mode="NO_ENGINE_SUBSTITUTION"

重新啟動 mysqld 後
sql_mode 的值居然沒變!!!  居然沒變!!!   居然沒變!!!

mysql> show variables like 'sql_mode';
+---------------+--------------------------------------------+
| Variable_name | Value                                      |
+---------------+--------------------------------------------+
| sql_mode      | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+


原因
在 /usr/local/mysql 中還有另一個 my.cnf 會被 mysqld 讀入

/usr/local/mysql/my.cnf 裏頭只有一行設定:
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

把這一行註解掉, 重新啟動 mysqld 就OK