Hibernate encodes wrong while persisting objects [UTF-8]

懵懂的女人 提交于 2019-11-29 05:58:26

Try setting encoding in datasource

 <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>

Also are you sure that the input from forms is properly encoded? Do you use filter in your spring application? Run application in debug mode and check fields of your model object before persisting.

The filter should beplaced in your web.xml file:

<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>

If you have added the

?characterEncoding=UTF-8

parameter to the connection string consequently (after the db and tables have already been created), you need to recreate your database. Actually in my case i recreated my db with:

CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;

OR

alter database my_database default charset utf8 collate utf8_general_ci;

Note that i was using cyrillic strings.

Check what is the data stored in your bean. How is your bean populated?, is it through user input?, if yes, then you will have to write encoding in that page as UTF-8 as well and change your request and response parameter to UTF-8

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!