복붙노트

[SPRING] Hibernate는 객체를 영속화하는 동안 잘못 인코딩합니다 [UTF-8]

SPRING

Hibernate는 객체를 영속화하는 동안 잘못 인코딩합니다 [UTF-8]

모델 객체를 유지하면서 UTF-8 인코딩 문제에 직면하고 있습니다. 터키어에서 'ı'는 편지입니다. 또한 UTF-8 인코딩에 포함 된 다른 터키 문자가 있습니다. 내 모델 객체를 유지하는 동안 모든 'ı'문자는 '?'로 유지됩니다. DB에. 우분투 리눅스 64 비트 OS에서 MySQL 5.5를 사용하고 있습니다. 또한 저는 이미 최대 절전 모드와 c3p0 연결 인코딩 속성을 UTF-8로 설정했습니다. 디버깅 할 때 클라이언트의 데이터가 사실입니다.

여기에 내 설정이있어 누군가가 나를 도울 수 있으면 너무 행복해.

미리 감사드립니다.

Spring & Hibernate Config

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

해결법

  1. ==============================

    1.데이터 소스에서 인코딩 설정 시도

    데이터 소스에서 인코딩 설정 시도

     <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 파일에 있어야합니다.

    <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>
    
  2. ==============================

    2.추가 한 경우

    추가 한 경우

    매개 변수를 연결 문자열 (결과적으로 db 및 테이블을 만든 후)에 추가하려면 데이터베이스를 다시 만들어야합니다. 사실 내 경우에는 함께 내 DB를 재현 :

    또는

    내가 키릴 문자 문자열을 사용하고 있었다는 것에 유의하십시오.

  3. ==============================

    3.빈에 저장된 데이터가 무엇인지 확인하십시오. 빈이 어떻게 채워지 는가? 사용자 입력을 통한 것인가? 그렇다면, 그 페이지에서 UTF-8로 인코딩을 작성하고 요청 및 응답 매개 변수를 UTF-8로 변경해야한다.

    빈에 저장된 데이터가 무엇인지 확인하십시오. 빈이 어떻게 채워지 는가? 사용자 입력을 통한 것인가? 그렇다면, 그 페이지에서 UTF-8로 인코딩을 작성하고 요청 및 응답 매개 변수를 UTF-8로 변경해야한다.

  4. from https://stackoverflow.com/questions/11758094/hibernate-encodes-wrong-while-persisting-objects-utf-8 by cc-by-sa and MIT license