2

我有这个网站,其中有很多带有变音符号的文本(根据维基百科,字母添加了辅助字形),大多数人使用没有字形的单词搜索这些文本。现在,通过拥有没有变音符号的文本副本来做到这一点应该不具有挑战性。但是,我想突出显示原始文本中的匹配项。最好的方法是什么?

4

1 回答 1

1

您应该尝试更改 MySQL 数据库中的排序规则设置。

在这个话题的讨论中似乎经常出现三个:

  1. utf8_general_ci

  2. utf8_unicode_ci

  3. utf8_bin← 你可能想要这个。

我发现#3 将匹配搜索中的重音符号。这个答案提供了一些关于差异的背景,但没有提到utf8_bin对口音也很敏感的事实。您可能想尝试所有这三个,这样您就可以自己测试它是否适用于您正在处理的语言/脚本。

要真正确定事情会正确匹配,您还必须研究 Unicode 规范化,这实际上是一个完全不同的蜡球。您的用户可能会键入一个带有重音的查询,该查询的规范化与您的数据存储在其中的规范化不同,因此它可能无法匹配。我在 Sqlite 上遇到过这个问题,不确定它是否适用于 MySQL。

FWIW,这是CREATE TABLE我目前正在使用的,我需要匹配重音的地方,即设置 COLLATION:

CREATE TABLE `glosses` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `morphemes` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `labels` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `phrase_id` int(11) DEFAULT NULL,
  `nth_word` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

你可以在最后看到COLLATE=utf8_bin钉子。

于 2011-06-22T00:40:41.127 回答