2013-10-04 12 views
7

Ho difficoltà con i caratteri UTF-8. Questo è un semplice progetto JSF. Io uso JSF 2.2 e Glassfish 4.0UTF - 8 con JPA e Glassfish 4.0

Ho un metodo dove vado:

em.persist(user); 

Quando il debug

user.getName() 

a questo punto, posso vedere i caratteri UTF-8 nel mio IDE. Inoltre tengo la stringa in una sessione - bean e posso vederli anche sul browser bene.

Solo quando sono persistenti in DB, vengono mantenuti come: ?????

Posso anche modificare il DB personalmente e salvare i caratteri utf-8. Quello che voglio dire è che la mia configurazione SQL è buona per UTF-8.

Il problema è da qualche parte in JPA.

Questo è quello che ho provato: (tutti insieme:)

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> 

Si tratta di pesci vetro-web.xml:

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

e sto usando EntityManager gestito da container (tipo di transazione = JTA)

Quindi in pool di connessione JDBC in Glassfi sh ho:

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

per: proprietà: URL ...

Tuttavia nessuno di questi aiuto.

I caratteri di fermo non sono stati mantenuti correttamente.

risposta

7

Questo risolto:

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

quindi questo era sbagliato:

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

10

Quando si utilizza Glassfish, è possibile impostare queste proprietà in aggiunta ai pool di connessione JDBC. Individua e visualizza la connessione al tuo database in Amministrazione Web (Risorse-> Pool di connessioni JDBC-> tua.connection). Nella scheda delle proprietà aggiuntive aggiungere (se non ci sono ancora presenti) di cui proprietà e riavviare il server:

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

Il risultato sarà lo stesso se vengono aggiunti alla URL parametri, ma questa è la soluzione più gestibile a mio parere.

+0

Ha funzionato come un fascino, dovrebbe essere la risposta accettata per l'efficienza. –