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

标签 php mysql database internationalization

我有一个数据库 (Mysql),其中存储了超过 100 000 个不同语言的关键字。举个例子,如果我有三个列 [id] [turkish (utf8_turkish_ci)] [german(utf8)]

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

所以我应该使用

mb_convert_encoding

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

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

最佳答案

要使这项工作正常进行,您需要解决几个问题。

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

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

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

关于php - 搜索引擎中的多语言数据库编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35432198/

相关文章:

php - $_POST 可以区分两个同名元素吗?

php - 如果 float/double 等于或大于/小于最小值,如何在 Zend Framework 中进行验证?

mysql - SQL 选择某一列中具有最高值的前 3 行

php - 如何在 Symfony4 api-platform 中隐藏实体属性

php - Symfony2 创建自己的编码器来存储密码

sql - MySQL 多表计数查询

php - 从mysql读取数据并将变量传递给jquery函数,写入textarea,不起作用

mysql - 如果存在则更新,否则插入两个唯一列mysql

mysql - 带有归类 "utf8_general_ci"错误的 MySQL 表连接

mysql - 如果某个项目出现超过 10 次,请将其删除并存储新的