我的Rails应用程序使用的MySQL数据库目前具有默认的latin1_swedish_ci排序规则。由于Rails应用程序(包括我的应用程序)的默认字符集是UTF-8,所以在数据库中使用utf8_general_ci排序规则似乎是明智的。
我的想法正确吗?
假设是这样,那么将数据库中的排序规则和所有数据迁移到新编码的最佳方法是什么?
发布于 2008-10-13 15:24:19
UTF-8以及任何其他Unicode编码方案都可以以任何语言存储字符,因此它是数据库代码页的最佳选择。
另一方面,排序规则设置是一个与编码方案完全不同的问题。它涉及排序顺序、大小写转换、字符串相等比较以及与语言相关的内容。排序规则设置应与数据库中使用的语言匹配。
UTF-8通用排序规则(我在这里假设--特别是我不熟悉MySQL )用于语言未知和需要一些简单的默认排序的情况。它可能对应于Unicode代码点的排序,如果您存储的是瑞典语,那么这几乎肯定不是您想要的。
发布于 2008-10-13 14:52:04
转换为UTF-8作为字符集。
排序规则设置只用于排序和类似的东西。选择大多数用户期望的排序规则。
发布于 2008-10-13 20:14:31
将数据库中的现有数据正确地用latin1编码,将表转换为utf8 (使用ALTER,如文档中所述)应该是有效的。
然后,您的应用程序所需要做的就是继续做它以前做过的事情。如果您的应用程序想要使用unicode字符,它应该将其连接编码设置为utf8并使用utf8,但这是它自己的问题。
问题是,很多垃圾网络应用程序都会将utf8数据发送给mysql,并告诉它将其视为latin1。MySQL将完美地履行这一义务,并按照指示将垃圾保存到表中。
将表从latin1转换为utf8不会修复此错误,因为您确实存在完全的垃圾。修复它们是很重要的,特别是在应用程序的生命周期中,它一直在向数据库谈论不同类型的垃圾。
https://stackoverflow.com/questions/197275
复制相似问题