2016-01-15 17 views
5

Sto cercando di salvare i caratteri russi in MySQL utilizzando un'applicazione graal, tuttavia, nel DB esso viene memorizzato come ????I caratteri russi vengono memorizzati come ???? in mysql in applicazione graal

La mia origine dati di mappatura:

dataSource { 
    pooled = true 
    driverClassName = "com.mysql.jdbc.Driver" 
    dialect = "org.hibernate.dialect.MySQL5InnoDBDialect" 
    username = "sa" 
    password = "" 
} 
.... 
url = "jdbc:mysql://localhost/mydb?useUnicode=true&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8" 

La mia classe di dominio

class Lang { 

    String langText 

    static constraints = { 
     langText nullable: true, blank: true 
    } 

    static mapping = { 
     langText type: 'text' 
    } 
} 

codifica della tabella lang è utf8

mysql> SELECT CCSA.character_set_name FROM information_schema.`TABLES` T, 
    ->  information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA 
    -> WHERE CCSA.collation_name = T.table_collation 
    -> AND T.table_name = "lang"; 
+--------------------+ 
| character_set_name | 
+--------------------+ 
| utf8    | 
+--------------------+ 
1 row in set (0.01 sec) 

codifica per la colonna lang_text è utf8

mysql> SELECT character_set_name FROM information_schema.`COLUMNS` 
    -> WHERE table_name = "lang" 
    -> AND column_name = "lang_text"; 
+--------------------+ 
| character_set_name | 
+--------------------+ 
| utf8    | 
+--------------------+ 
1 row in set (0.01 sec) 

Questo è come mi sto salvare le informazioni al DB:

def lang() { 
    Lang l = new Lang() 
    l.langText = "Здравствуйте, меня зовут Энтони"; 
    l.save(flush: true) 
} 

Ma quando guardo il database, le informazioni vengono memorizzato come ?????

mysql> select lang_text from lang where id = (select max(id) from lang); 
+---------------------------------+ 
| lang_text      | 
+---------------------------------+ 
| ????????????, ???? ????? ?????? | 
+---------------------------------+ 
1 row in set (0.00 sec) 

Questo sembra essere un GORM/Hibernate problema, perché quando entro la stringa nel database con mysql, aggiunge bene:

mysql> insert into lang (lang_text) values ("Здравствуйте, меня зовут Энтони"); 
Query OK, 1 row affected, 1 warning (0.10 sec) 

mysql> select lang_text from lang where id = (select max(id) from lang); 
+------------------------------------------------------------+ 
| lang_text             | 
+------------------------------------------------------------+ 
| Здравствуйте, меня зовут Энтони       | 
+------------------------------------------------------------+ 
1 row in set (0.05 sec) 
+0

Controllare questo: [graal-non-codifica-the-unicode-caratteri-propriamente] (http: // StackOverflow .com/questions/10511497/grails-not-encoding-the-unicode-characters-proper) – swiatows

risposta

1

sono stato in grado di risolvere questo problema. Avevo & nel mio URL jdbc. Avrebbe dovuto appena stato &

Spero che questo consente di risparmiare a qualcuno il tempo che ho trascorso in questa> _ <

+0

Sei sicuro? Di solito i punti interrogativi derivano da (1) non riuscire a stabilire utf8 per la connessione, _e_ (2) non dichiarando 'CHARACTER SET utf8' sulla tabella/colonna. L'elemento 1 potrebbe spiegare la differenza tra i due modi di inserire i dati. Per il n. 2, si prega di fornire 'SHOW CREATE TABLE lang;'. –

Problemi correlati