2016-01-15 9 views
5

I russische Zeichen in mysql mit einer Grails-Anwendung zu speichern versuchen jedoch in der DB als ????Russische Zeichen werden als ???? in mysql in Grails-Anwendung

Mein Datasource-Mapping es gespeichert wird:

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" 

My Domain-Klasse

class Lang { 

    String langText 

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

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

Encoding der lang Tabelle 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) 

Encoding für die Spalte lang_text ist 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) 

Dies ist, wie ich die Informationen an die DB speichere:

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

Aber wenn ich in der Datenbank suchen, die Informationen zu sein gespeichert als ?????

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

Dies scheint ein GORM/Hibernate Problem zu sein, denn wenn ich die Zeichenfolge in die Datenbank unter Verwendung von mysql eingeben, fügt fein:

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

prüfen this: [Grails-nicht-codierende-the-Unicode-Zeichen-richtig] (http: // Stackoverflow .com/questions/10511497/grails-nicht-Encoding-the-Unicode-Zeichen-richtig) – swiatows

Antwort

1

konnte ich dieses Problem beheben. Ich hatte & in meiner jdbc URL. Es sollte nur & gewesen

Hope this jemand die Zeit spart ich dafür ausgegeben> _ <

+0

Sind Sie sicher? Gewöhnlich kommen Fragezeichen von (1) fehl, utf8 für die Verbindung zu etablieren, _and_ (2) nicht 'CHARACTER SET utf8' auf der Tabelle/Spalte deklarieren. Punkt 1 könnte den Unterschied zwischen Ihren beiden Möglichkeiten zum Einfügen der Daten erklären. Für # 2 geben Sie bitte 'SHOW CREATE TABLE lang;' an. –

Verwandte Themen