首页 > 解决方案 > MySQL 哪种排序规则可以将西里尔文和拉丁文进行比较?

问题描述

在我的项目中,如果用户在搜索字段中输入西里尔字母“Дог”,我需要数据库返回“Dog”,反之亦然。像音译搜索?...

例如,在塞尔维亚,正式使用拉丁字符和西里尔字符......可以互换使用。我想也许塞尔维亚拉丁语和西里尔语有一个特殊的排序规则,但我看到只有分开的版本。

有可能这样做吗?如何?

标签: mysqlcollation

解决方案


我很确定没有一个 utf8/utf8mb4 归类处理D= Д(等)。

我建议您执行以下操作:

  • 表中有一个额外的列。它将是字符串的“罗马化”版本。索引此列。(可以CHARACTER SET latin1;我不知道什么是最好的COLLATION;也许没关系。)
  • 当您插入一行时,计算这个额外列的字符串。
  • 还将任何搜索字符串罗马化。然后搜索该新列。

罗马化可能最好在您的应用程序中完成。在 SQL 中执行此操作将是一个长期混乱的嵌套REPLACE(REPLACE(...))


推荐阅读