2013-08-10 8 views
16

Mam prostą aplikację internetową, w której używam JPA.JPA utf-8 znaków nie trwało

Mam podmiot o nazwie BlogEntry.

Kiedy przesyłam nowy wpis BlogEntry, podczas debugowania aplikacji widzę znaki utf8.

Na przykład

em.persist(entity); 

W tej linii, jeśli debugować na przykład:

entity.getTitle() 

Mogę pomyslnie zobaczyć UTF-8 znaków w IDE. (Jak GG, lub CC)

Również moja baza danych ma UTF8 sortowania i mogę wstawić UTF-8 znaków dobrze z SQL przy użyciu jak "INSERT INTO ..."

Jednak z JPA, znaki są utrzymywane jako ????

Dlaczego to możliwe?

Pozdrawiam.

Oto moja persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> 
    <persistence-unit name="Persistence"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>com.tugay.blog.core.model.Blogentry</class> 
     <properties> 
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/blogdatabase"/> 
      <property name="javax.persistence.jdbc.user" value="root"/> 
      <property name="javax.persistence.jdbc.password" value="aabbccdd"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

Odpowiedz

37

wykorzystywać kodowanie znaków we właściwości pliku persistence.xml

<property name="javax.persistence.jdbc.url" 
    value="jdbc:mysql://localhost:3306/blogdatabase?useUnicode=yes&amp;characterEncoding=UTF-8"/> 
+0

pamiętać, aby uniknąć jakichkolwiek znaków specjalnych, jak poniżej: 'spring.datasource.url = jdbc \: mysql \: // localhost \: 3306/blogdatabase \? useUnicode = true \ & characterEncoding = utf \ -8 \ & characterSetResults = utf \ -8' – vijay

12

to rozwiązać go ładnie:

<property name="hibernate.connection.useUnicode" value="true" /> 
<property name="hibernate.connection.characterEncoding" value="UTF-8" /> 

Edycja: w hibernacji 4.3.1 działa to:

<property name="connection.useUnicode">true</property> 
<property name="connection.characterEncoding">utf-8</property> 
14

To pomogło w Spring Boot:

spring.datasource.url=jdbc:mysql://localhost:3306/securitydb?useUnicode=yes&characterEncoding=UTF-8 
Powiązane problemy