搜索引擎中的多语言数据库编码
Posted
技术标签:
【中文标题】搜索引擎中的多语言数据库编码【英文标题】:Multi language database encoding in search engine 【发布时间】:2016-05-27 17:03:38 【问题描述】:我有一个数据库(mysql),其中存储了超过 100 000 个不同语言的关键字。举个例子,如果我有三个列 [id] [turkish (utf8_turkish_ci)] [german(utf8)]
用户可以在搜索框中输入德语或土耳其语单词。如果用户输入一个德语单词,一切都很好,所以它会打印出土耳其语,但是如何用土耳其语来解决它。我问是因为每种语言都有自己的附加字符,例如 ä ü ö ş 等。
所以我应该使用
mb_convert_encoding
要转换字符串,然后如何检查它是德语还是土耳其语字符串,我认为这会很复杂。还是表格的编码错误?
现在卡住了,所以如何实现它,以便用户可以输入两种语言的关键字
【问题讨论】:
【参考方案1】:您需要解决几个问题才能使其正常工作。
首先,您已选择utf8
字符集来保存所有文本。这是一个不错的选择。如果这是 2016 年的新应用程序,您可以选择 utf8mb4
字符集。选择字符集后,您的用户应该能够阅读您的文本。
第二,为了搜索和排序(WHERE
和ORDER BY
),您需要为每种语言选择合适的排序规则。对于现代德语,utf8_general_ci
可以很好地工作。如果您需要标准的词汇排序,utf8_unicode_ci
会更好一些。读这个。 http://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html
对于现代西班牙语,您应该使用utf8_spanish_ci
。这是因为在西班牙语中 N 和 Ñ 字符被认为是不同的。我不知道通用排序规则是否适用于土耳其语。
请注意,您似乎混淆了问题中字符集和排序规则的概念。您提到了土耳其语列的排序规则和德语列的字符集。
您可以在查询中明确指定字符集和排序规则。例如,你可以写
WHERE _utf8 'München' COLLATE utf8_unicode_ci = table.name;
在这个表达式中,_utf8 'München'
是一个字符常量,而
constant COLLATE utf8_unicode_ci = table.name
是一个查询说明符,其中包括一个明确的排序规则名称。阅读本文。http://dev.mysql.com/doc/refman/5.7/en/charset-collate.html
第三,您可能希望为每个特定语言的列分配一个默认排序规则。默认排序规则已包含在索引中,因此它们将有助于加快搜索速度。
第四,您的用户将需要使用适当的输入法(键盘映射等)向您的应用程序呈现数据。希望土耳其语用户知道如何输入土耳其语单词。
【讨论】:
我忘了写我用 unicode 替换特殊字符来保存土耳其语单词,所以我可能使用 strtr() 来检测字符串中的字符以将其替换为要发送的 unicode查询 我的意思是我将 strtr() 与数组一起使用以上是关于搜索引擎中的多语言数据库编码的主要内容,如果未能解决你的问题,请参考以下文章
.NET Core工作流引擎(RoadFlow)多语言版发布