mybatis-插入數據庫中文報錯問題


問題描述
本人利用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&amp;characterEncoding=UTF-8"/>

 

 

有時候設置了?useUnicode=true&amp;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; //修改表以及字符字段的字符集

特此留個印記,方便大家查詢。

 

也可以通過navicate設計表直接修改


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM