2013-10-04 4 views
7

Ich habe Schwierigkeiten mit UTF-8 Zeichen. Dies ist ein einfaches JSF-Projekt. Ich verwende JSF 2.2 und Glassfish 4.0UTF - 8 mit JPA und Glassfish 4.0

ich eine Methode, wo ich gehe:

em.persist(user); 

Als ich

user.getName() 

in diesem Punkt zu debuggen, kann ich das utf-8-Zeichen sieht in meinem IDE. Außerdem behalte ich die Zeichenfolge in einer Session - Bean und ich kann sie auch im Browser gut sehen.

Nur wenn sie in DB gespeichert sind, werden sie beibehalten als: ?????

Ich kann auch die DB selbst bearbeiten und utf-8 Zeichen speichern. Was ich meine, ist meine SQL-Konfiguration ist gut für UTF-8.

Das Problem ist irgendwo in JPA.

Dies ist, was ich versucht habe: (alle zusammen:)

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" transaction-type="JTA"> 
     <jta-data-source>fus</jta-data-source> 
     <class>com.tugay.fup.core.model.User</class> 
     <properties> 
      <property name="javax.persistence.jdbc.url" 
        value="jdbc:mysql://localhost:3306/fus?useUnicode=yes&amp;characterEncoding=UTF-8"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

Dies ist Glassfish-web.xml:

<glassfish-web-app> 
    <parameter-encoding default-charset="UTF-8"/> 
</glassfish-web-app> 

Und ich bin mit EntityManager verwaltet von Container (Transaktionsart = JTA)

So in JDBC Verbindungspools in Glassfi sh ich habe:

jdbc:mysql://localhost:3306/fus?useUnicode=true&connectionCollation=utf8_general_ci&characterSetResults=utf8 

für: Eigenschaft: URL ...

jedoch keine dieser Hilfe.

Noch Zeichen nicht korrekt beibehalten.

Antwort

7

Dies löste es:

jdbc: mysql: // localhost: 3306/fus useUnicode = true & characteren = UTF-8 & characterSetResults = UTF-8

so war dies falsch:

jdbc: mysql: // localhost: 3306/fus useUnicode = true & connectionCollation = utf8_general_ci & characterSetResults = uTF8

10

Wenn Sie Glassfish verwenden, können Sie diese Eigenschaften als Ergänzung zu Ihren JDBC-Verbindungspools festlegen. Suchen und sehen Sie Ihre Datenbankverbindung in der Webverwaltung (Ressourcen-> JDBC-Verbindungspools-> Ihre Verbindung). In zusätzlichen Register Eigenschaften hinzufügen (falls noch nicht vorhanden sind) genannten Eigenschaften und starten Sie Ihren Server:

//name, value 
characterEncoding, UTF-8 
characterSetResults, UTF-8 
useUnicode, true 

Das Ergebnis wird das gleiche sein, wenn Parameter URL hinzugefügt werden, aber das ist besser verwaltbar Lösung meiner Meinung nach.

+0

Arbeitete wie ein Charme, sollte die akzeptierte Antwort für die Effizienz sein. –