jdbc-mysql 中文亂碼解決


在客戶端或者JDBC連接時定制支持中文的編碼格式(通常使用UTF-8),這樣插入數據的時候,讓mysql為自動為我們轉碼,可行的辦法有兩種:

1、如果是通過DriverManager.getConnection(url)編碼方式操作JDBC,可以在JDBC的url中追加useUnicode=true&characterEncoding=UTF-8解決亂碼問題

jdbc.url=jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=UTF-8

2、如果是通過其它數據源,比如DBCP、tomcat-jdbc、c3p0、spring-jdbc、hibernate讀取配置文件,在url中追加useUnicode=true&characterEncoding=UTF-8是不起作用的,而是通過數據源自身的配置生效,比如下列配置:

<!-- Tomcat data source -->
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">
 <property name="driverClassName" value="${jdbc.driverClassName}" />
 <property name="url" value="${jdbc.url}" />
 <property name="username" value="${jdbc.username}" />
 <property name="password" value="${jdbc.password}" />
 <property name="dbProperties">
   <props>
       <prop key="useUnicode">yes</prop>
       <prop key="characterEncoding">utf8</prop>
   </props>
 </property>
 <!-- Configuration refer to optimizing connection performance -->
 <property name="initialSize" value="10" />
 <property name="maxActive" value="100" />
 <property name="maxIdle" value="50" />
 <property name="minIdle" value="10" />
 <property name="suspectTimeout" value="60" />
 <property name="timeBetweenEvictionRunsMillis" value="30000" />
 <property name="minEvictableIdleTimeMillis" value="60000" />
 <property name="testOnBorrow" value="true" />
 <property name="validationQuery" value="SELECT 1" />
 <property name="validationInterval" value="30000" />
 <!-- End Configuration refer to optimizing connection performance -->
</bean>

其中:

<props>
     <prop key="useUnicode">yes</prop>
     <prop key="characterEncoding">utf8</prop>
</props>

等價於url中的useUnicode=true&characterEncoding=UTF-8


免責聲明!

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



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