問題描述
本人利用Mybatis 將中文數據插入表中,發現表中中文數據顯示是???。
解決方法
1、將項目的編碼格式改為UTF-8,並將頁面傳到后台的數據輸出出來,看是不是頁面端亂碼傳輸過來。
2、首先檢查了創建表時表用的字符集是utf-8,排序規則是utf8_general_ci。修改后,測試還是 問號(???)。
3、改數據庫jdbc.properties文件中的url字段數據,看網上說url中設置 “useUnicode=true&characterEncoding=UTF-8”,於是測試一下,發現可以了。這里注意,如果是在XML文檔中配置,必須將“&”改成“& amp;”。
相關知識
useUnicode=true&characterEncoding=UTF-8 含義
指定字符的編碼、解碼格式;unicode:編碼。encoding :解碼。
mysql數據庫用的是gbk編碼,而項目數據庫用的是utf-8編碼。這時候如果添加useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下兩個方面:
存數據時:
數據庫在存放項目數據的時候會先用UTF-8格式將數據解碼成字節碼,然后再將解碼后的字節碼重新使用GBK編碼存放到數據庫中。
取數據時:
在從數據庫中取數據的時候,數據庫會先將數據庫中的數據按GBK格式解碼成字節碼,然后再將解碼后的字節碼重新按UTF-8格式編碼數據,最后再將數據返回給客戶端。
在xml配置文件中配置數據庫utl時,要使用&的轉義字符也就是& amp;例如:
<property name="url" value="jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8"/>
有時候設置了?useUnicode=true&characterEncoding=UTF-8編譯代碼的時候會報錯
錯誤代碼: Cause: java.sql.SQLException: Incorrect string value: '\xE5\xBD\xA9\xE8\x99\xB9' for column 'name' at row 1
#原因:由於默認情況下,mysql的字符集是latin1(ISO_8859_1),包含庫、表、字段,即使建表時指定編碼格式也會失效。
#修改方案:
a.先查看庫、表、表字符字段的編碼格式
SHOW CREATE DATABASE kepler; //查看庫的字符集
SHOW CREATE TABLE kepler.statis;//查看表的字符集
SHOW FULL COLUMNS FROM kepler.statis; //查看字段編碼
b.修改庫、表、字符字段的編碼
ALTER DATABASE kepler DEFAULT CHARACTER SET utf8; //修改庫的字符集
ALTER TABLE kepler.statis CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; //修改表以及字符字段的字符集
特此留個印記,方便大家查詢。