一:異常信息:errorCode:1366
Caused by: java.sql.SQLException: Incorrect string value: '\xE7\xAE...' for column 'description' at row 1
二:異常原因:字符集沖突
mysql insert入庫的時候,由於插入數據編碼與數據庫字段字符集不一致,導致數據無法插入。
三:追本溯源
在mysql數據庫中執行show character set,可以看到不同的字符集的最大長度不同。
如果執插入utf8編碼數據,數據庫表中字段字符集是latin。(查詢字段字符集方法:show full columns from user;)
如果最大長度為3的utf8字符集存儲到最大長度為1的latin數據庫字段中,數據會被截斷,無法正常插入,導致異常。
四:解決辦法
修改數據庫的字符集編碼
MySQL配置文件在Windows下叫my.ini,在MySQL的安裝根目錄下;在Linux下叫my.cnf,該文件位於/etc/my.cnf。
(1)window服務器
mysql數據庫的配置文件my.ini,此文件放在mysql根目錄下。在此文件下查找default-character-set屬性,並將其值更改為utf8:default-character-set = utf8
(2)linux服務器default-character-set=utf8
在新的版本5.5以上,如果這樣修改的話,會造成無法啟動的錯誤,經過查看mysql日志,如下:
是default-character-set參數不可用。給定一系列字符並賦予對應的編碼後,所有這些字符和編碼對組成的集合就是字符集(Character Set)。例如,給定字符列表為{'A','B'}時,{'A'=>0, 'B'=>1}就是一個字符集;
(2)字符序(Collation)是指在同一字符集內字符之間的比較規則;MySQL中的字符序名稱遵從命名慣例:以字符序對應的字符集名稱開頭;以_ci(表示大小寫不敏感)、_cs(表示大小寫敏感)或_bin(表示按編碼值比較)結尾。例如:在字符序``utf8_general_ci''下,字符``a''和``A''是等價的;
(3)MySQL字符集設置