Saturday, August 30, 2008

MySQL 数据库字符集问题

在rails项目开发中碰到一个MySQL数据库字符集问题 ,一个DEFAULT CHARSET utf8的数据库中,有一个ENGINE=MyISAM DEFAULT CHARSET=utf8的数据表,手工往其中插入中文,日文,韩文都没有问题,但通过rails添加数据记录时,中文,日文没有问题,但是插入韩文就一直乱码,rails和手工执行的sql相同,如下所示:


set names utf8;
insert TableName values('', '시험');

网上查不到什么相关资料,在rails中做了一些测试性的调整,都没有解决问题。最后决定调整mysql server的默认字符集,虽然觉得这个应该不会造成rails无法插入韩文,因为在rails中加过before_save前置过滤器,在其中先运行"set names utf8;",之后再执行insert操作,也一样是乱码。
在my.cnf中加入如下配置并重启mysql服务之后,rails就可以正常插入韩文了!!

# The MySQL server
[mysqld]
character-set-server = utf8


另摘录一段mysql server启动的参数选项说明:
·         --character-set-server=charset
使用charset作为 默认服务器字符
·         --collation-server=collation
使用collation作为 默认服务器校对规则
·         (DEPRECATED) --default-character-set=charset
使用char设置作为 默认字符集。由于--character-set-server,反对使用该选项。
·         --default-collation=collation
使用collation 作为默认校对规则。由于--collation-server,反对使用该选项。

No comments :