UTF-8 仅在 Grails 数据库表中

Posted

技术标签:

【中文标题】UTF-8 仅在 Grails 数据库表中【英文标题】:UTF-8 only in Grails database tables 【发布时间】:2010-10-03 15:37:47 【问题描述】:

当 Grails 1.0.4 与 mysql 一起使用时,自动生成的数据库表的字符集似乎默认为 ISO-8859-1。我宁愿将所有内容都存储为纯 UTF-8。这可能吗?

来自自动生成的数据库定义:

ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

注意“latin1”部分。

【问题讨论】:

【参考方案1】:

大多数 MySQL 安装默认为 latin1,因此如果没有另外说明,驱动程序将使用默认值。在连接 URL 中添加字符集指令就足够了,例如:

jdbc:mysql://localhost/databaseName?useUnicode=yes&characterEncoding=UTF-8

为此,MySQL 连接器 JAR 必须是版本 5(3.x 将不起作用)。

来源:MySQL Reference manual: Using Character Sets and Unicode

【讨论】:

【参考方案2】:

还必须在创建时为数据库设置默认字符编码

CREATE DATABASE databaseName DEFAULT CHARACTER SET utf8;

【讨论】:

【参考方案3】:

显然,您必须通过 defining your own custom SQL dialect 破解您的 Hibernate(Grails 用于持久性)。

【讨论】:

【参考方案4】:

您必须使用排序规则utf8_genenal_ci 创建数据库。然后将此字符串添加到连接字符串:

useUnicode=true&characterEncoding=utf-8"

【讨论】:

以上是关于UTF-8 仅在 Grails 数据库表中的主要内容,如果未能解决你的问题,请参考以下文章

mysqldump整个结构,但仅在单个命令中选择表中的数据

Grails数据库迁移-将插入值手动更改日志记录到表中的特定列

如何更改生成表中的列顺序(grails 约束不适用于 mongodb 插件)

Grails - 向所有域对象添加 where 子句

Grails:扩展和嵌入域类有啥区别?

下面的 SQL 的 GORM(grails) 标准是啥?