如何使变音符号不敏感,
这个带有变音符号的波斯语字符串
هواىبرآفتاببارز
与mySql
中删除的变音符号不同هواىبرآفتاببارز
有没有办法告诉mysql忽略变音符号,还是我必须手动删除字段中的所有变音符号?
答案 0 :(得分:2)
我正在使用utf8(utf8_general_ci)并且在没有变音符号的情况下搜索阿拉伯语不起作用,它不是不敏感的,或者它是但不能正常工作。
我尝试使用Hex查看带有和没有变音符号的字符,它看起来像mysql,认为它是两个不同的字符。
我正在考虑使用十六进制和替换(大量替换)来过滤变音符时搜索单词。
我的解决方案是对阿拉伯语单词进行不敏感搜索:
SELECT arabic_word FROM Word
WHERE
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(HEX(REPLACE(
arabic_word, "-", "")), "D98E", ""), "D98B", ""), "D98F", ""), "D98C",
""),"D991",""),"D992",""),"D990",""),"D98D","") LIKE ?', '%'.$search.'%'
以十六进制格式化的值是我们要过滤的变音符号。 丑陋,但我没有找到另一个anwser。
答案 1 :(得分:1)
这有点像不区分大小写的问题。
SELECT * FROM blah WHERE UPPER(foo) = "THOMAS"
在比较之前,只需将两个字符串转换为无变音符号。
答案 2 :(得分:0)
您是否已经阅读了所有MySQL Character Set Support来检查您的问题的答案是否已经存在?特别是整理是理解的。
我猜测使用utf8_general_ci可以为你做正确的事
答案 3 :(得分:0)
设置
set names 'utf8'
在进行查询之前,通常会执行拉丁查找的技巧。我不确定这是否适用于阿拉伯语。
答案 4 :(得分:0)
我遇到的最干净的解决方案是:
SELECT arabic_word
FROM Word
WHERE ( arabic_word REGEXP '{$search}' OR SOUNDEX( arabic_word ) = SOUNDEX( '{$search}' ) );
我没有检查过SOUNDEX功能的成本。我想这可能适用于小型表,但不适用于大型数据集。