Mysql
升級到 MySQL 5.6 後將 sql_mode 設置為“空白”
將 MySQL 從 5.5 升級到 5.6 後,我們的一些應用程序遇到了問題,需要將 sql_mode 設置為空白來解決這個問題。我添加
sql_mode = ''
了,my.cnf
但對 mysql 設置沒有影響。如何保持 sql_mode 空白?
序幕
在我的組織中,有人問過我同樣的問題,因為每個人都在使用 MySQL 5.5。在過去的 8 個月中,所有數據庫伺服器都升級到了 MySQL 5.6。一些客戶端應用程序也受到
sql_mode
變化的影響。根本原因
我剛剛發現了為什麼您所做的不起作用並且解決方法非常簡單。
根據MySQL 5.5 文件, sql_mode 預設為空白 sting。
根據MySQL 5.6 Documentation, sql_mode 預設為
- MySQL 5.6.5 及後面的空白字元串
NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
在 5.6.6 和 GA好的,我希望你坐下。
這是 Oracle 在 MySQL 5.6 中實現sql_mode的懶惰方式:有一個附加
my.cnf
文件。如果你跑
cat /usr/my.cnf
您將看到以下內容
# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html [mysqld] # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # These are commonly set, remove the # and set as required. # basedir = ..... # datadir = ..... # port = ..... # server_id = ..... # socket = ..... # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
見第 28 行?
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
解決方案
STEP 01 : 註釋掉第 28 行
/usr/my.cnf
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
STEP 02 :手動設置sql_mode
mysql> SET GLOBAL sql_mode = '';
而已 !!!
結語
試一試 !!!
對於 5.7.13(可能還有其他 5.7 變體),以下技巧有效:
在
my.cnf
:sql_mode=ALLOW_INVALID_DATES
並重新啟動伺服器。如果您不想重新啟動,您可以這樣做:
set global sql_mode='ALLOW_INVALID_DATES'
然後
mysqld
忘記其所有迂腐的預設設置並表現得像預設配置的 5.5。