下午再SQLyong導入了一個DB。發現寫入和讀取的時候都是?問號,立刻想到可能是數據庫的編碼問題,
於是設置了數據裏的編碼。 create database db_name character set utf8;
發現仍有問號出現,可能是程序和工作空間的問題,查看了編碼都是一致的utf-8,
用debug斷點逐步查看,寫入到數據庫的是中文,但是在數據庫顯示的也是?。
這就奇怪了,程序和數據庫都是統一的編碼。後來在C3P0加了行代碼,解決了問題。
<propertyname="jdbcUrl">jdbc:mysql://localhost:3306/ebookstore?useUnicode=true&characterEncoding=UTF-8</property>
但是爲什麼加上這個就可以了呢?
添加的作用是:指定字符的編碼、解碼格式。
例如:mysql數據庫用的是gbk編碼,而項目數據庫用的是utf-8編碼。這時候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那麼作用有如下兩個方面:
1. 存數據時:
數據庫在存放項目數據的時候會先用UTF-8格式將數據解碼成字節碼,然後再將解碼後的字節碼重新使用GBK編碼存放到數據庫中。
2.取數據時:
在從數據庫中取數據的時候,數據庫會先將數據庫中的數據按GBK格式解碼成字節碼,然後再將解碼後的字節碼重新按UTF-8格式編碼數據,最後再將數據返回給客戶端。
注意:在xml配置文件中配置數據庫utl時,要使用&的轉義字符也就是&
例如:<property name="url" value="jdbc:mysql://localhost:3306/email?useUnicode=true&characterEncoding=UTF-8" />
【百度答案來源:CSDN ID:JAVA愛好者】