關閉Ubuntu預設mysql5.7版的strict mode設定方法(嚴格模式)

昨天遇到一個靈異事件事件搞了我一整晚,新開發一個Xoops線上測驗模組有5個資料表欄位的數值要寫入log資料表中,在本地端測試是都正常能寫入的,所以後面的流程也能繼續跑完,結果上傳到客戶端後log資料表怎樣就是無法寫入,後面的程式自然也就無法執行,非常奇怪從來沒遇過這樣的事情,檢查了一下Xoops的資料表寫入語法也沒出錯,為了保險起見改用php的sql語法再寫一次,本地端也是能存入log資料表,但上傳到客戶端就不行,難道是客戶主機卡到陰了嗎???搞了整晚!!算了還去睡覺了!!

就在半夢半醒之間,突然彷彿聽到一個聲音(要加點靈異效果文章才會有張力),是strict mode沒關阿~笨蛋!~是strict mode沒關阿~笨蛋!~是strict mode沒關阿~笨蛋!~!!然後我就驚醒了!!!這才想到乾!!客戶用的mysql版本是mysql5.7版,mysql5.5版之後預設增加了strict mode模式(嚴謹模式),如果欄位有空值都需要給一個默認值才行,不能是null,否則會無法寫進資料庫,既然找到問題了,那就要想辦法解決了!!上網查了一下果然找到仙人留下的足跡,按照他媽的方法修改了設定果真取消了strict mode模式,欄位值也能寫進log資料表中了,這一刻我他媽從來沒那麼感動過,真是妖手骨的感動莫名阿!!!終於能跟客戶交差不用被埋到後山了!!!好感動阿!!!

以下為取消mysql5.7的strict mode模式方法教學:

1、SSH連線到伺服器的root,找到以下路徑,並建立一個disable_strict_mode.cnf檔案
/etc/mysql/conf.d/disable_strict_mode.cnf   <-建立檔案

2、打開文件並寫入以下語法:

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

3、輸入指令重新啟用mysql

sudo service mysql restart

為了確認strict mode模式是不是已經被關閉了,可以在phpMyAdmin的sql中輸入SELECT @@GLOBAL.sql_mode進行測試




 如果顯示IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FO則表示strict mode模式已經被關閉,恭喜您可以脫離苦海了。

教學撰寫:徐嘉裕 Neil hsu


留言

這個網誌中的熱門文章

xampp修改phpMyAdmin的MySQL密碼方法-教學撰寫:徐嘉裕Neil hsu

jQuery用.each()取代for迴圈

jquery.datepicker下拉月曆只顯示年-月的設定方法-教學撰寫:徐嘉裕Neil hsu