一、問題描述
背景:代碼遷移,ssm框架在插入數據到mysql數據庫時,中文亂碼。代碼中的編碼配置沒有問題,因為該項目代碼以前使用過,沒有問題。現在換了數據庫,數據庫配置也做了修改,統一使用utf8,但還是亂碼,數據庫配置存在不知明的原因,但是有別的解決方法。
解決方法:在數據庫的配置的url后加useUnicode=true&characterEncoding=UTF-8參數。
private static String URL = "jdbc:mysql://localhost:3306/ki?useUnicode=true&characterEncoding=UTF-8"; private static String USER = "root";
private static String PASSWORD = "root";
用xml配置時,&要使用它的轉義符:
<!-- 數據源 --> <bean id="ds" class="org.apache.commons.dbcp.BasicDataSource"> <property name="url" value="jdbc:mysql://localhost:3306/ki?useUnicode=true&characterEncoding=UTF-8"/> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="username" value="root"/> <property name="password" value="root"/> </bean>
xml的字符轉義符:
添加的作用是:指定字符的編碼、解碼格式。
例如:mysql數據庫用的是gbk編碼,而項目中用的是utf-8編碼。這時候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下兩個方面:
存數據時:
數據庫在存放項目數據的時候會先用UTF-8格式將數據解碼成字節碼,然后再將解碼后的字節碼重新使用GBK編碼存放到數據庫中。
取數據時:
在從數據庫中取數據的時候,數據庫會先將數據庫中的數據按GBK格式解碼成字節碼,然后再將解碼后的字節碼重新按UTF-8格式編碼數據,最后再將數據返回給客戶端。
