2015-01-22 3 views
1

을 사용하여 UTF-8 기호를 유지할 수는 없지만 많은 질문이 있지만 내 문제는 해결되지 않습니다. 최대 절전 모드에서 JPA를 사용하고 UTF-8 문자를 저장하려고합니다.MySQL, JPA, 최대 절전 모드

내 받는다는 종속성은 다음과 같습니다

 <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.1-api</artifactId> 
      <version>1.0.0.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>5.1.1.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.3.6.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.34</version> 
     </dependency> 

     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-apt</artifactId> 
      <version>3.6.0</version> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-jpa</artifactId> 
      <version>3.6.0</version> 
     </dependency> 

그래서 내가 JPA 2.1 QueryDSL 3.6.0을 사용합니다. 내 persistance.xml이 : 그럼

<?xml version="1.0" encoding="UTF-8" ?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 


http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> 


<persistence-unit name="thePersistenceUnit" transaction-type="RESOURCE_LOCAL"> 
     <properties> 

      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/newsDB?useUnicode=true&amp;characterEncoding=UTF-8"/> 
      <property name="javax.persistence.jdbc.user" value="root"/> 
      <property name="javax.persistence.jdbc.password" value="root"/> 

      <!--Hibernate properties--> 
      <property name="hibernate.show_sql" value="false"/> 
      <property name="hibernate.format_sql" value="false"/> 
      <property name="hibernate.hbm2ddl.auto" value="create"/> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 

     </properties> 
    </persistence-unit> 
</persistence> 

내가 XAMPP MySQL과 아파치 enter image description here enter image description here

을 사용하고

port= 3306 
[client] 
default-character-set = utf8 

[mysqld] 
init-connect='SET NAMES utf8' 
character-set-server = utf8 
collation-server = utf8_general_ci 

[mysql] 
default-character-set = utf8 

내 DB 데이터 정렬을 추가 할 수 있습니다 : enter image description here

그리고 내 테이블 :내가 로거를 켜면enter image description here

나는 보았다 : 당신은 값이 이상한 것을 볼 수 있습니다

TRACE [main] (BasicBinder.java:81) - binding parameter [1] as [VARCHAR] - [Xelian] 
TRACE [main] (BasicBinder.java:81) - binding parameter [2] as [VARCHAR] - [Описание] 
TRACE [main] (BasicBinder.java:81) - binding parameter [3] as [CLOB] - [Content of the text .Чирипаха.] 
TRACE [main] (BasicBinder.java:81) - binding parameter [4] as [BIGINT] - [112] 
TRACE [main] (BasicBinder.java:81) - binding parameter [5] as [TIMESTAMP] - [Thu Jan 22 19:44:59 EET 2015] 
TRACE [main] (BasicBinder.java:81) - binding parameter [6] as [VARCHAR] - [Title] 
TRACE [main] (BasicBinder.java:81) - binding parameter [7] as [TIMESTAMP] - [Thu Jan 22 19:44:59 EET 2015] 
TRACE [main] (BasicBinder.java:81) - binding parameter [8] as [BIGINT] - [0] 

Р§РёСЂРёРїР ° С ... ° Р.. 그리고 내가 볼 phpMyAdmin을 축복하는 : enter image description here

을하지만 당신은 내 DB는 properlly Cyrilic의 sumbols를 보여주고 있음을 알 수 나는 수동 enter image description here

을 편집 할 때. 그래서 나는 문제가 궁금해.

답변

1

So. 내 컴퓨터에서 isntal MySQL Server XAMPP를 제거합니다.

show variables like "%character%";show variables like "%collation%"; 

enter image description here

을 그리고 모든 확인 될 것으로 보인다 : 그리고 MySQL의 명령 행 클라이언트를 실행합니다. utf-8 every every. 그런 다음 DB의 결과는 적절하게 인코딩되지 않았고 여전히 이상한 기호가있었습니다. 내가 편집 할 때 키릴 문자가 잘 삽입되었다. 그래서 나는 Hibernate persistance.xml을 의심한다. 나는 그것을 편집하고 넣어 :

<?xml version="1.0" encoding="UTF-8" ?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> 


<persistence-unit name="thePersistenceUnit" transaction-type="RESOURCE_LOCAL"> 

    <properties> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/dnesdb?useUnicode=true&amp;characterEncoding=UTF-8" /> 
     <property name="javax.persistence.jdbc.user" value="root" /> 
     <property name="javax.persistence.jdbc.password" value="root" /> 

     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
     <property name="hibernate.show_sql" value="true" /> 
     <property name="hibernate.hbm2ddl.auto" value="update" /> 

     <property name="hibernate.connection.characterEncoding" value="utf8"/> 
     <property name="hibernate.connection.useUnicode" value="true"/> 
     <property name="hibernate.connection.charSet" value="UTF-8"/> 
    </properties> 
</persistence-unit> 
</persistence> 

이제 UTF-8 (키릴) OK 지속됩니다.

!!! 그리고 자바 속성을 설정하기 위해 DB를 생성 전에 을 잊지 마세요 : -Dfile.encoding = UTF-8 테이블이 생성되면 그 이후에 사용자가 설정 -Dfile.encoding = UTF-8, 문제가있을 것입니다 . 그래서 자바 인코딩 속성을 설정 한 다음 테이블을 다시 생성하십시오.

+1

동일한 문제가 있었지만 솔루션이 잘 작동합니다. 감사합니다. 감사합니다. –

1

당신이이 문제를 해결했다고 생각하지만 내 조언이 다른 사용자에게 유용 할 수 있습니다.

나는 비슷한 문제가있었습니다. stackoverflow에서 많은 권장 사항을 사용하려고했지만 유용하지 않았습니다.문제는 내 IDE (Intellij IDEA)에서 내 프로젝트의 인코딩에있었습니다. 내 프로젝트에는 Windows-1251 인코딩이 있고 데이터베이스에는 utf8 인코딩이 있습니다. 데이터베이스에 따라 프로젝트 인코딩을 변경해야합니다. Intellij : 설정 -> 편집기 -> 파일 인코딩 -> 프로젝트 인코딩.