我的Rails应用程序使用的MySQL数据库目前的默认排序规则为latin1_swedish_ci
。由于Rails应用程序(包括我的)的默认字符集是UTF-8,因此在数据库中使用utf8_general_ci
排序规则似乎很明智。我应该使用latin1_swedish_ci排序规则将MySQL数据库迁移到utf-8吗?如果是这样,怎么办?
我的想法是否正确?
假设它是,将归类和数据库中的所有数据迁移到新编码的最佳方法是什么?
我的Rails应用程序使用的MySQL数据库目前的默认排序规则为latin1_swedish_ci
。由于Rails应用程序(包括我的)的默认字符集是UTF-8,因此在数据库中使用utf8_general_ci
排序规则似乎很明智。我应该使用latin1_swedish_ci排序规则将MySQL数据库迁移到utf-8吗?如果是这样,怎么办?
我的想法是否正确?
假设它是,将归类和数据库中的所有数据迁移到新编码的最佳方法是什么?
转换为UTF-8作为字符集。
整理设置仅用于排序和类似的东西。选择大多数用户期望的排序规则。
UTF-8以及任何其他Unicode编码方案可以存储任何语言的字符,因此它是数据库代码页的绝佳选择。
另一方面,排序规则设置与编码方案是完全分离的问题。它涉及排序顺序,大小写转换,字符串相等比较以及类似于特定语言的东西。排序规则设置应该与数据库中使用的语言相匹配。
UTF-8通用归类是(我在这里假设 - 我对MySQL并不熟悉),用于语言未知并需要一些简单默认排序的情况。它可能对应于Unicode代码点排序,如果您要存储瑞典语,这几乎肯定不是您想要的。
提供数据库中的现有数据在latin1中正确编码,将表转换为utf8(使用ALTER TABLE,如文档中所述)应该正常工作。
然后,您的所有应用程序需要做的就是继续执行之前的操作。如果您的应用程序想要使用unicode字符,它应该将其连接编码设置为utf8并使用utf8,但这是它自己的问题。
的问题是,大量的废话Web应用程序的历史上发送UTF8数据到MySQL,并告诉它把它当作latin1的。按照指示,MySQL将完美实现这一点,并将垃圾保存到表中。
将表格从latin1转换为utf8不会修复这个错误,因为您真的确实在那里有垃圾。修复它们是非常平常的,特别是在应用程序的生命周期中,它一直在向数据库讨论不同类型的垃圾。
使用下面的MySQL查询转换你的专栏:
ALTER TABLE users MODIFY description VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;
要查看有关表的全部细节:
SHOW FULL COLUMNS FROM users;
好了,将数据从一个Rails应用程序,它具有字符编码设置为即将到来utf-8,而不是latin1。据推测,这使我的应用程序进入'垃圾网页应用程序'类别,它将utf-8发送到latin1表格中?你建议我如何转换数据? – Olly 2008-10-14 12:02:09