我有一个数据库 (Mysql),其中存储了超过 100 000 个不同语言的关键字。举个例子,如果我有三个列 [id] [turkish (utf8_turkish_ci)] [german(utf8)]
用户可以在搜索框中输入德语或土耳其语单词。如果用户输入一个德语单词,一切都很好,所以它会打印出土耳其语单词,但如何用土耳其语单词解决这个问题。我问是因为每种语言都有自己的附加字符,例如 ä ü ö ş 等。
所以我应该使用
mb_convert_encoding
转换字符串,然后如何检查它是德语还是土耳其语字符串我认为这会很复杂。还是表的编码有误?
现在卡住了,所以如何实现它以便用户可以输入两种语言单词的关键字
最佳答案
要使这项工作正常进行,您需要解决几个问题。
首先,您选择了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
第三,您可能希望为每个特定于语言的列分配一个默认 排序规则。默认排序规则包含在索引中,因此它们将有助于加快搜索速度。
第四,您的用户需要使用适当的输入法(键盘映射等)向您的应用程序呈现数据。土耳其语用户希望知道如何输入土耳其语单词。
关于php - 搜索引擎中的多语言数据库编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35432198/