2008-10-13 9 views
7

我的Rails应用程序使用的MySQL数据库目前的默认排序规则为latin1_swedish_ci。由于Rails应用程序(包括我的)的默认字符集是UTF-8,因此在数据库中使用utf8_general_ci排序规则似乎很明智。我应该使用latin1_swedish_ci排序规则将MySQL数据库迁移到utf-8吗?如果是这样,怎么办?

我的想法是否正确?

假设它是,将归类和数据库中的所有数据迁移到新编码的最佳方法是什么?

回答

1

转换为UTF-8作为字符集。

整理设置仅用于排序和类似的东西。选择大多数用户期望的排序规则。

4

UTF-8以及任何其他Unicode编码方案可以存储任何语言的字符,因此它是数据库代码页的绝佳选择。

另一方面,排序规则设置与编码方案是完全分离的问题。它涉及排序顺序,大小写转换,字符串相等比较以及类似于特定语言的东西。排序规则设置应该与数据库中使用的语言相匹配。

UTF-8通用归类是(我在这里假设 - 我对MySQL并不熟悉),用于语言未知并需要一些简单默认排序的情况。它可能对应于Unicode代码点排序,如果您要存储瑞典语,这几乎肯定不是您想要的。

1

提供数据库中的现有数据在latin1中正确编码,将表转换为utf8(使用ALTER TABLE,如文档中所述)应该正常工作。

然后,您的所有应用程序需要做的就是继续执行之前的操作。如果您的应用程序想要使用unicode字符,它应该将其连接编码设置为utf8并使用utf8,但这是它自己的问题。


的问题是,大量的废话Web应用程序的历史上发送UTF8数据到MySQL,并告诉它把它当作latin1的。按照指示,MySQL将完美实现这一点,并将垃圾保存到表中。

将表格从latin1转换为utf8不会修复这个错误,因为您真的确实在那里有垃圾。修复它们是非常平常的,特别是在应用程序的生命周期中,它一直在向数据库讨论不同类型的垃圾。

+0

好了,将数据从一个Rails应用程序,它具有字符编码设置为即将到来utf-8,而不是latin1。据推测,这使我的应用程序进入'垃圾网页应用程序'类别,它将utf-8发送到latin1表格中?你建议我如何转换数据? – Olly 2008-10-14 12:02:09

0

使用下面的MySQL查询转换你的专栏:

ALTER TABLE users MODIFY description VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

要查看有关表的全部细节:

SHOW FULL COLUMNS FROM users; 
相关问题