問題描述
本人利用Mybatis 將中文數據插入表中,發現表中中文數據顯示是???。java
解決方法
一、將項目的編碼格式改成UTF-8,並將頁面傳到後臺的數據輸出出來,看是否是頁面端亂碼傳輸過來。
二、首先檢查了建立表時表用的字符集是utf-8,排序規則是utf8_general_ci。修改後,測試仍是 問號(???)。
三、改數據庫jdbc.properties文件中的url字段數據,看網上說url中設置 「useUnicode=true&characterEncoding=UTF-8」,因而測試一下,發現能夠了。這裏注意,若是是在XML文檔中配置,必須將「&」改爲「& amp;」。
相關知識
useUnicode=true&characterEncoding=UTF-8 含義
指定字符的編碼、解碼格式;unicode:編碼。encoding :解碼。mysql
mysql數據庫用的是gbk編碼,而項目數據庫用的是utf-8編碼。這時候若是添加useUnicode=true&characterEncoding=UTF-8 ,那麼做用有以下兩個方面:sql
存數據時:數據庫
數據庫在存放項目數據的時候會先用UTF-8格式將數據解碼成字節碼,而後再將解碼後的字節碼從新使用GBK編碼存放到數據庫中。測試
取數據時:編碼
在從數據庫中取數據的時候,數據庫會先將數據庫中的數據按GBK格式解碼成字節碼,而後再將解碼後的字節碼從新按UTF-8格式編碼數據,最後再將數據返回給客戶端。url
在xml配置文件中配置數據庫utl時,要使用&的轉義字符也就是& amp;例如:spa
<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 1code
#緣由:因爲默認狀況下,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; //修改表以及字符字段的字符集
特此留個印記,方便你們查詢。