MySQL5中文亂碼和Data Too Long For 'XXX' 解決方法

最近,在用mysql做一個測試用例的時候,出現亂碼。

現象:無論是從MySQL Query Browser還是Java程序插入數據庫,只要插入中文字符, 就會報錯“Data too long for column 'XXXXX' ”。這裏,顯然不是字段長度設置太短的問題。

在網上查資料,大多介紹不外乎下面集中解決方法:

1.修改Server端編碼。修改character_set_xxx

2.在JDBC-URL連接後面加上&useUnicode=true&characterEncoding=UTF8

3.修改my.ini文件
去掉sql-mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"中的STRICT_TRANS_TABLES

 

真是病急亂投醫,所以該試的方法都試了,問題依然無法解決。

被這個問題折磨的實在不行了,最後準備卸載重裝一次。再不行,就去別人的機器上試下。在備份表的SQL語句時,發現SQL如下:

DROP TABLE IF EXISTS `test`.`test1`;
CREATE TABLE `test`.`test1` (
column_name column_type [charset latin7]
) ENGINE=InnoDB DEFAULT CHARSET=latin7;
最後面,竟有這麼一句:
DEFAULT CHARSET=latin7。

直接暈倒,明明已經在MySQL Query Browser中將表的編碼設置成UTF8了,怎麼是latin7。改成UTF8,問題解決。
看來,有時候不能太相信可視化的編輯器,還是直接的SQL最直接。

還有,就是查看下錶的字段也有column charset選項,看是否設置正確了。

綜上所述,出現亂碼後,一定檢查數據庫服務器、庫、表、字段的編碼設置是否支持中文。

經過試驗,只要上述都設置爲UTF8,即使,URL後面不添加useUnicode=true&characterEncoding=UTF8就不會出現亂碼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章