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

我很难用阿拉伯文字进行变音符号不敏感搜索.

我已经测试了该表的多种设置:utf8和utf16中的编码以及utf8_general_ci,utf16_general_ci和utf16_unicode_ci中的排序规则.

搜索适用于特殊字符.即:

select * from test where text like '%a%'

将返回文本为a,å或ä的列.但这不适用于阿拉伯语变音符号.即,如果文本是بِسْمِ,并且我搜索بسم,则不会获得任何匹配.

任何想法如何通过这个?

真正的用法稍后将是PHP(搜索功能),但是在将其移植到PHP之前,我直接在MySQL数据库中进行测试.

(摘自评论)

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 

解决方法:

显示集合;看看您有哪些排序规则.在我的版本中,我看不到任何适合阿拉伯语的内容.但是,utf8_unicode_ci似乎可以进行所需的折叠.这是一种简单的尝试方法:

SELECT 'بِسْمِ' = 'بسم' COLLATE utf8_unicode_ci;

我得到的结果是1(true),这意味着它们被认为是相等的.使用utf8_general_ci,它返回0,表示不相等.

然后声明您的字段为VARCHAR(…)(或TEXT)字符集utf8 COLLATE utf8_unicode_ci;对于utf8mb4同样如此.

要建立自己的归类(并提交以供将来版本使用),请参阅http://dev.mysql.com/doc/refman/5.6/en/adding-collation.html

上一篇:PHP:允许字母,数字和阿拉伯字符


下一篇:php-如何为阿拉伯字符定义libpcre正则表达式?