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

这是产品日志。它没有获得相同的角色。

App 18197 stderr: Started GET "/letterfilter?title=%D0%8C" for IP at2015-07-30 12:03:46 -0400
App 18197 stderr: Processing by PostsController#letterfilter as HTML
App 18197 stderr:   Parameters: {"title"=>"Ќ"}
App 18197 stderr:   Rendered posts/letterfilter.html.haml within layouts/application (4.3ms)
App 18197 stderr:   Rendered posts/_search.html.haml (0.8ms)
App 18197 stderr:   Rendered shared/_header.html.haml (9.6ms)
App 18197 stderr:   Rendered shared/_footer.html.haml (0.2ms)
App 18197 stderr: Completed 200 OK in 18ms (Views: 16.6ms | ActiveRecord: 0.2ms)

App 18197 stderr: Started GET "/letterfilter?title=%D0%9A" for IP at 2015-07-30 12:03:51 -0400
App 18197 stderr: Processing by PostsController#letterfilter as HTML
App 18197 stderr:   Parameters: {"title"=>"К"}
App 18197 stderr:   Rendered posts/letterfilter.html.haml within layouts/application (4.9ms)
App 18197 stderr:   Rendered posts/_search.html.haml (0.7ms)
App 18197 stderr:   Rendered shared/_header.html.haml (7.7ms)
App 18197 stderr:   Rendered shared/_footer.html.haml (0.2ms)
App 18197 stderr: Completed 200 OK in 17ms (Views: 14.2ms | ActiveRecord: 0.9ms)


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

欢迎任何帮助。谢谢。

最佳答案

Ќ是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也是如此。

回到您的问题...您的意思是“没有得到相同的角色”?

关于mysql - Rails/MySQL奇怪的UTF-8编码问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31741660/

10-14 15:08
查看更多