Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否应该将一个具有拉丁文1_-swedish_ci排序规则的MySQL数据库迁移到utf-8,如果是,如何迁移?_Mysql_Ruby On Rails_Character Encoding - Fatal编程技术网

我是否应该将一个具有拉丁文1_-swedish_ci排序规则的MySQL数据库迁移到utf-8,如果是,如何迁移?

我是否应该将一个具有拉丁文1_-swedish_ci排序规则的MySQL数据库迁移到utf-8,如果是,如何迁移?,mysql,ruby-on-rails,character-encoding,Mysql,Ruby On Rails,Character Encoding,我的Rails应用程序使用的MySQL数据库当前的默认排序规则是latin1\u swedish\u ci。由于Rails应用程序(包括我的)的默认字符集是UTF-8,因此我认为在数据库中使用utf8\u general\u ci排序规则是明智的 我的想法正确吗 假设是这样,将排序规则和数据库中的所有数据迁移到新编码的最佳方法是什么 转换为UTF-8作为字符集 排序规则设置只用于排序之类的事情。选择大多数用户所期望的排序规则。UTF-8以及任何其他Unicode编码方案都可以以任何语言存储字符,

我的Rails应用程序使用的MySQL数据库当前的默认排序规则是
latin1\u swedish\u ci
。由于Rails应用程序(包括我的)的默认字符集是UTF-8,因此我认为在数据库中使用
utf8\u general\u ci
排序规则是明智的

我的想法正确吗


假设是这样,将排序规则和数据库中的所有数据迁移到新编码的最佳方法是什么

转换为UTF-8作为字符集


排序规则设置只用于排序之类的事情。选择大多数用户所期望的排序规则。

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

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


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

如果数据库中的现有数据正确编码为拉丁文1,则将表转换为utf8(如文档中所述,使用ALTER TABLE)应该就行了

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


问题是,大量垃圾web应用程序历史上都将utf8数据发送到mysql,并告诉它将其视为拉丁文1。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,而不是拉丁语1。大概这将我的应用程序归入“垃圾网络应用程序”类别,将utf-8发送到拉丁1表?您建议我如何转换数据?这个答案混淆了排序规则和字符编码