Rails / MySQL奇怪的UTF-8编码问题

时间:2015-07-31 08:35:33

标签: mysql ruby-on-rails encoding utf-8

我有一个使用西里尔语(马其顿语)字母的应用程序。我有一个包含所有字母的字母菜单(手动输入为我从助手调用的数组),它链接到第一个字符是该字母的项目。因此,似乎“К”和“Ќ”(也是“Г”和“Ѓ”)列出了相同的项目,就像它们使用相同的字母一样。在开发中工作得很好,不确定它为什么在生产中这样做。我在生产数据库上设置了UTF-8编码。

这是生产日志。它没有得到相同的角色。

ID  name    username

1   A       A100
2   B       B200
3   C       C300
4   user    user400

可能导致此问题的原因是什么?我应该将我的数据库编码更新为utf8mb4吗?

欢迎任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

Ќ在utf8或utf8mb4中为十六进制D08C。西里尔文完全由CHARACTER SET涵盖。 КD09A,如?title=

中所示 嗯,这很有意思:

mysql> SELECT 'К' = 'Ќ' COLLATE utf8_bin AS bin,
              'К' = 'Ќ' COLLATE utf8_general_ci AS general,
              'К' = 'Ќ' COLLATE utf8_unicode_ci AS unicode;
+-----+---------+---------+
| bin | general | unicode |
+-----+---------+---------+
|   0 |       1 |       0 |
+-----+---------+---------+

mysql> SELECT 'Г' = 'Ѓ' COLLATE utf8_bin AS bin,
              'Г' = 'Ѓ' COLLATE utf8_general_ci AS general,
              'Г' = 'Ѓ' COLLATE utf8_unicode_ci AS unicode;
+-----+---------+---------+
| bin | general | unicode |
+-----+---------+---------+
|   0 |       1 |       0 |
+-----+---------+---------+

位模式不同,因此utf8_bin整理不相等。但通常情况下,一般情况相同,unicode也是如此。

回到你的问题......你是什么意思“它没有得到相同的角色”?