問題一般格式為: 1366 Incorrect string value: '' for column 1300 Invalid utf8 character string: '' 向mysql插入中文(東亞字元)出現問題一般是有欄位不是utf8的問題。 向mysql插入腦殘文/火星文/特殊字元出現 ...
問題一般格式為:
1366 Incorrect string value: '' for column
1300 Invalid utf8 character string: ''
向mysql插入中文(東亞字元)出現問題一般是有欄位不是utf8的問題。
向mysql插入腦殘文/火星文/特殊字元出現問題一般是有欄位不是utf8mb4的問題,因為mysql的utf8並不完整,超過3個位元組的編碼不支持。
我遇到了,不同伺服器不同結果的現象。
一個mysql提示錯誤,一個提示警告。
研究一番,結果如下:
運維人員有一套對mysql的統一配置方案,採用寬鬆方式,不進行嚴格處理,導致字元編碼問題被視為警告。
而我測試伺服器安裝的mysql為預設配置,採用嚴格表模式,有字元編碼問題視為錯誤。
select @@global.sql_mode;可查看這些設置。
set sql_mode='xxxx';可修改
導致這個問題並不是客戶端與伺服器的連接不能傳輸這些字元(不然也不會有警告的情況了),而是傳輸模式中的字元集沒有協商好。
在客戶端的連接建立後,先執行一個sql:set names utf8mb4,你就可以傳輸完整的字元編碼信息了。