搜索引擎中的多语言数据库编码

时间:2016-02-16 12:07:15

标签: php mysql database internationalization

我有一个数据库(Mysql),我在其中存储了超过10万个带有不同语言关键字的关键字。这是一个例子,如果我有三个colums [id] [土耳其语(utf8_turkish_ci)] [德语(utf8)]

用户可以在搜索框中输入德语或土耳其语单词。如果用户输入一个德语单词一切都很好,那么它打印出土耳其语单词,但如何用土耳其单词解决它。我问,因为每种语言都有自己的附加字符,如äüöş等。

我应该使用

mb_convert_encoding

转换字符串然后如何检查它是德国还是土耳其字符串我认为这将是复杂的。或者表的编码是错误的吗?

现在不知道如何实现它,以便用户可以输入两种语言的关键词

1 个答案:

答案 0 :(得分:0)

要使其正常工作,您需要解决几个问题。

首先,您已选择utf8字符集来保存所有文字。这是一个不错的选择。如果这是2016年新应用程序,您可以选择utf8mb4字符集。选择字符集后,您的用户应该能够阅读您的文字。

第二次,为了搜索和排序(WHEREORDER 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

第三次,您可能希望为每个特定于语言的列分配默认排序规则。默认排序规则会被添加到索引中,因此它们有助于加快搜索速度。

第四,您的用户需要使用适当的输入法(键盘映射等)向您的应用程序显示数据。土耳其语用户希望知道如何输入土耳其语单词。