我很难用阿拉伯文字进行变音符号不敏感搜索.
我已经测试了该表的多种设置: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