遇到Data truncated for column 'd' at row 和改sql_mode那些事
最近公司報表出問題了
繼上次DB還原MySQL在Linux下預設有分大小寫和Incorrect integer value: ’’ for column ’num’ 問題 | 程式狂想筆記,有些設定跑掉
這次出現這個Data truncated for column 'd' at row
因為重新設定還原sql_mode是嚴格模式…
為什麼這次會出現Incorrect integer value: '' for column 'num'
不知道這次也是Excel匯入也出現Data truncated for column 'd' at row
為什麼有不一樣的結果呢??
發現帶入空字串輸入到double會發這種事情…
導致可能前人寫的Excel匯入會有狀況
有簡單用docker hub pwd(play with docker)測試
簡單記錄測試紀錄
再開嚴格模式
'1'
都可以正常存入,但前後多不明空白會不能寫入
但沒開嚴格模式時候
' 1'
不能正常寫入
'1 '
可以正常寫入
當然他也沒有很聰明''
跟'NULL'
會變NULL
可能要改sql_mode改成沒嚴格模式
不過嚴格模式,主管擔心要重啟MySQL
所以也不能隨意重啟orz
最後網路上有爬到XYZ的筆記本: MySQL Server 的 SQL Modes
SQL Modes 預設值:
在 5.6.5 和之前的版本,預設值是空的,沒有設置。
在 5.6.6 和之前的版本,預設值是 NO_ENGINE_SUBSTITUTION。
查詢目前 SQL Modes 目前的設定:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
GLOBAL.sql_mode 是目前伺服器的設定值,SESSION.sql_mode 是目前連線的設定值
設定 SQL Modes 方法有以下三種:
1.修改設定檔(my.cnf或my.ini)中的 sql-mode=“設定值”
2.MySQL啟動時,加參數 –sql-mode=“設定值”
3.連線登入後修改
SET GLOBAL sql_mode=‘設定值’;
SET SESSION sql_mode=‘設定值’;
GLOBAL 是修改目前伺服器的設定值,SESSION 是修改目前連線的設定值
看到下面的3.連線登入修改
,就謝天謝地
當然也要注意重新啟動,記得要改my.cnf
|
|
不用這個方法改code不知改道何時才會改完…
最後新專案開發用到MySQL還是啟用
比較不會出問題
|
|
參照來源:mysql的sql_mode合理设置
感覺比較不會出甚麼嚴重問題