繁体   English   中英

我应该将带有latin1_swedish_ci排序规则的MySQL数据库迁移到utf-8,如果是,如何?

[英]Should I migrate a MySQL database with a latin1_swedish_ci collation to utf-8 and, if so, how?

我的Rails应用程序使用的MySQL数据库目前具有latin1_swedish_ci的默认排序规则。 由于Rails应用程序(包括我的)的默认字符集是UTF-8,因此在数据库中使用utf8_general_ci排序规则似乎是明智的。

我的想法是否正确?

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

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

另一方面,校对设置是与编码方案完全不同的问题。 它涉及排序顺序,大/小写转换,字符串相等比较以及特定于语言的事物。 排序规则设置应与数据库中使用的语言相匹配。

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

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

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

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

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


问题是大量垃圾网络应用程序历史上已经将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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM