MySQL变音符号不敏感搜索(阿拉伯语)

Ehs*_*san 6 mysql arabic diacritics

我无法使用阿拉伯语文本进行变音符号不敏感搜索。

我已经为相关表测试了多种设置:utf8 和 utf16 中的编码以及 utf8_general_ci、utf16_general_ci 和 utf16_unicode_ci 中的排序规则。

搜索适用于 åä 特殊字符。IE:

select * from test where text like '%a%'
Run Code Online (Sandbox Code Playgroud)

将返回文本为 a、å 或 ä 的列。但它不适用于阿拉伯语变音符号。即如果文本是?????? 我搜索???,我没有得到任何点击。

任何想法如何通过这个?

真正的用途稍后将是 PHP(一个搜索功能),但我直接在 MySQL 数据库中工作,只是为了在将其移植到 PHP 之前进行测试。

(来自评论)

CREATE TABLE test (
    ? id int(11) unsigned NOT NULL AUTO_INCREMENT,
    ? text text COLLATE utf8_unicode_ci,
    ? PRIMARY KEY (id)?
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 
Run Code Online (Sandbox Code Playgroud)

Ric*_*mes 2

SHOW COLLATIONS;查看您有哪些可用的排序规则。在我的版本中,我没有看到任何看起来适合阿拉伯语的内容。然而,utf8_unicode_ci似乎可以做你想要的折叠。这是一个简单的尝试方法:

\n\n
SELECT \'\xd8\xa8\xd9\x90\xd8\xb3\xd9\x92\xd9\x85\xd9\x90\' = \'\xd8\xa8\xd8\xb3\xd9\x85\' COLLATE utf8_unicode_ci;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我得到的结果是 1(真),这意味着它们被认为是相等的。结果utf8_general_ci返回0,意思是不等于。

\n\n

然后将您的字段声明为VARCHAR(...) (or TEXT) CHARACTER SET utf8 COLLATE utf8_unicode_ci; 对于 utf8mb4 也是如此。

\n\n

要构建您自己的排序规则(并提交它以包含在未来版本中),请参阅http://dev.mysql.com/doc/refman/5.6/en/adding-collat ​​ion.html

\n