我在对阿拉伯语文本进行不区分发音符号的搜索时遇到了问题。
我已经测试了所述扫描床的多个设置:utf8和utf16中的编码以及utf8_general_ci、utf16_general_ci和utf16_unicode_ci中的排序规则。
该搜索适用于åä特殊字符,即:
select * from test where text like '%a%'
将返回文本为a,åor ä的列。但它不适用于阿拉伯语变音符号。即,如果文本为ëşêşêsês,而我搜索了ëşêsês,我没有得到任何匹配。
有什么办法可以解决这个问题吗?
真实的的用法稍后将是PHP(一个搜索函数),但我直接在MySQL数据库中工作,只是为了在将其移植到PHP之前进行测试。
(from评论)
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
4条答案
按热度按时间laik7k3q1#
SHOW COLLATIONS;
来查看您有哪些可用的排序规则。在我的版本上,我没有看到任何看起来适合阿拉伯语的排序规则。但是,utf8_unicode_ci
似乎可以完成您想要的折叠。下面是一个简单的尝试方法:我得到的结果是1(真),这意味着它们被认为是相等的。对于
utf8_general_ci
,它得到的结果是0,这意味着不相等。然后将字段声明为
VARCHAR(...) (or TEXT) CHARACTER SET utf8 COLLATE utf8_unicode_ci
;utf8 mb 4也是如此。要构建自己的归类(并提交它以包含在将来的版本中),请参见http://dev.mysql.com/doc/refman/5.6/en/adding-collation.html
ljo96ir52#
(This不是“答案”,而是“决议”)
看起来
LIKE
不适用于你的阿拉伯字符串。我不知道它还会失败多少次。我建议你写一个关于http://bugs.mysql.com的bug报告。下面是一个测试用例,显示LIKE '...'
和LIKE '%...%'
都找不到这两个字符串,而'='可以工作:y1aodyip3#
我也遇到过同样的问题,我用以下步骤解决了这个问题:
1.创建一个函数来删除变音符号并统一相似字符
1.在SELECT语句内的条件中使用此函数,如下所示:
xdyibdwo4#
这个命令忽略变音符号。试试看。