使用Grails连接到UTF-8 MySQL数据库

时间:2012-02-13 17:49:32

标签: mysql grails utf-8 amazon-rds

我一直无法将Grails应用程序连接到亚马逊RDS上托管的MySQL数据库。它运行正常,我意识到俄罗斯的用户正在将西里尔字符输入到我的表单中,这导致MySQL数据库显示数据为????????。

所以,我converted the data in the database from Latin1 to UTF-8.(为什么哦,为什么UTF-8不是默认值?)

我在JDBC连接字符串的末尾添加了“?useUnicode = yes& characterEncoding = UTF-8”:

jdbc:mysql://myserver.amazonaws.com/mydatabase?useUnicode=yes&characterEncoding=UTF-8

现在,当grails连接到我的数据库时,我收到错误

  

java.io.StreamCorruptedException:无效的流标题:C2ACC3AD           at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:800)           在java.io.ObjectInputStream。(ObjectInputStream.java:297)

我看到用其他框架描述的解决方案的一种可能性是运行数据库连接

SET NAMES UTF8 

连接数据库后立即。但是,我不知道如何强制Grails这样做,因为Grails处理它的数据库连接过程。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

要回答我自己的问题,这个问题是由一个域类存储的,它将一些元数据存储为HashMap。反过来,这些数据在数据库中被序列化。当数据库从LATIN-1移动到UTF-8时,由于字符编码的更改,此序列化数据已损坏。当访问数据时,应用程序然后以上述方式进行处理。

一旦我手动将该列中的所有数据设置为null,问题就解决了。

作为编码实践,最好避免在域对象中使用HashMaps的快捷方式。