【问题标题】: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

要转换字符串,然后如何检查它是德语还是土耳其语字符串,我认为这会很复杂。还是表格的编码错误?

现在卡住了,所以如何实现它,以便用户可以输入两种语言的关键字

【问题讨论】:

    标签: php mysql database internationalization


    【解决方案1】:

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

    首先,您已选择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

    第三,您可能希望为每个特定语言的列分配一个默认排序规则。默认排序规则已包含在索引中,因此它们将有助于加快搜索速度。

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

    【讨论】:

    • 我忘了写我用 unicode 替换特殊字符来保存土耳其语单词,所以我可能使用 strtr() 来检测字符串中的字符以将其替换为要发送的 unicode查询
    • 我的意思是我将 strtr() 与数组一起使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    相关资源
    最近更新 更多