【问题标题】:Russian characters being stored as ???? in mysql in grails application俄语字符被存储为????在 grails 应用程序中的 mysql 中
【发布时间】:2016-01-15 12:25:32
【问题描述】:

我正在尝试使用 grails 应用程序将俄语字符保存到 mysql 中,但是在数据库中它被存储为 ????

我的数据源映射:

 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"

我的域类

class Lang {

    String langText

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

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

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)

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)

这就是我将信息保存到数据库的方式:

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

但是当我查看数据库时,信息被存储为?????

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

这似乎是一个 GORM/Hibernate 问题,因为当我使用 mysql 将字符串输入数据库时​​,它会添加正常:

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)

【问题讨论】:

标签: mysql grails jdbc character-encoding grails-orm


【解决方案1】:

我能够解决这个问题。我的 jdbc url 中有&。应该是&

希望这可以节省我花在这上面的时间>_

【讨论】:

  • 你确定吗?通常问号来自(1)未能为连接建立utf8,(2)没有在表/列上声明CHARACTER SET utf8。第 1 项可以解释两种插入数据的方式之间的区别。对于#2,请提供SHOW CREATE TABLE lang;
猜你喜欢
  • 1970-01-01
  • 2013-01-13
  • 2021-03-29
  • 1970-01-01
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-29
  • 2018-04-08
相关资源
最近更新 更多