2012-08-01 75 views
13

我在保持模型對象的同時面臨UTF-8編碼問題。在土耳其'ı'是一封信。還有一些其他的土耳其字符包含在UTF-8編碼中。當我堅持我的模型對象時,所有'''字符被持續爲''到DB。我在Ubuntu Linux 64位操作系統上使用MySQL 5.5。此外,我已經將休眠& c3p0連接編碼屬性設置爲UTF-8。當我調試時,來自客戶端的數據是真實的。Hibernate在持久化對象時編碼錯誤[UTF-8]

這是我的配置,如果有人能幫助我,我會很開心。

在此先感謝。


春& Hibernate的配置

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource"><ref local="dataSource"/></property> 
     <property name="packagesToScan" value="com.tk.dms.model" /> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.use_sql_comments">true</prop> 
       <prop key="hibernate.format_sql">false</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
       <prop key="hibernate.generate_statistics">true</prop> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> 
       <prop key="hibernate.connection.characterEncoding">UTF-8</prop> 
       <prop key="hibernate.connection.useUnicode">true</prop> 
       <!-- c3p0 properties --> 
       <prop key="hibernate.c3p0.min_size">2</prop> 
       <prop key="hibernate.c3p0.max_size">50</prop> 
       <prop key="hibernate.c3p0.maxPoolSize">50</prop> 
       <prop key="hibernate.c3p0.minPoolSize">2</prop> 
       <prop key="hibernate.c3p0.initialPoolSize">2</prop> 
       <prop key="hibernate.c3p0.timeout">300</prop> 
       <prop key="hibernate.c3p0.max_statements">50</prop>     
      </props> 
     </property> 
    </bean> 

回答

31

嘗試設置在數據源中編碼

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName"> 
     <value>com.mysql.jdbc.Driver</value> 
    </property> 
    <property name="url"> 
     <value>jdbc:mysql://127.0.0.1:3306/databaseName?characterEncoding=UTF-8</value> 
    </property> 
    <property name="username"> 
     <value>?</value> 
    </property> 
</bean> 

您是否確定表單的輸入是正確編碼的?你在你的彈簧應用程序中使用過濾器嗎?在調試模式下運行應用程序,並在持續之前檢查模型對象的字段。

過濾器應在web.xml文件beplaced:

<filter> 
    <filter-name>SetCharacterEncodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>SetCharacterEncodingFilter</filter-name> 
    <url-pattern>*</url-pattern> 
</filter-mapping> 
+1

感謝很多pawelccb,加入charachter編碼到url解決了問題.. – talha06 2012-08-02 10:58:03

+0

嘗試所有Hibernate和MySQL配置後,該過濾方法奏效。謝謝! – 2013-11-11 01:28:15

+2

你救了我的一天......像魅力一樣工作...... – Babu 2015-01-09 16:04:05

0

檢查什麼是存儲在bean中的數據。你的bean是如何填充的?是否通過用戶輸入?如果是,那麼你將不得不在UTF-8上編寫該頁面的編碼,並將你的請求和響應參數更改爲UTF-8

+0

我有一個過濾器,不幸的是它沒有解決這個錯誤.. – talha06 2012-08-02 10:56:20

1

如果您已經添加了

的characterEncoding = UTF-8

參數連接字符串?因此(在db和tables已經創建之後),你需要重新創建你的數據庫。其實在我的情況下,我重新創建我的數據庫:

CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;

OR

ALTER DATABASE MY_DATABASE默認字符集UTF8整理utf8_general_ci;

請注意,我使用西里爾字符串。

相關問題