3

我如何使变音符号不敏感,

例如这个带有变音符号的波斯语字符串

هواى بَر آفتابِ بارِز

与 mySql 中删除的变音符号不同

هواى بر آفتاب بارز

有没有办法告诉 mysql 忽略变音符号,或者我必须手动删除字段中的所有变音符号?

4

5 回答 5

3

这有点像不区分大小写的问题。

SELECT * FROM blah WHERE UPPER(foo) = "THOMAS"

只需在比较之前将两个字符串都转换为无变音符号。

于 2009-10-18T10:40:45.070 回答
2

我正在使用 utf8 (utf8_general_ci) 并且搜索没有变音符号的阿拉伯语不起作用,它不是不敏感的,或者它是但不能正常工作。

我尝试使用十六进制查看带有和不带有变音符号的字符,它看起来像 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.'%'

十六进制格式的值是我们要过滤的变音符号。丑陋,但我没有找到另一个答案。

于 2012-05-31T08:20:36.110 回答
0

您是否已经阅读了所有MySQL 字符集支持以检查您的问题的答案是否已经存在?尤其要理解排序规则。

我猜想使用 utf8_general_ci 可以为你做正确的事

于 2009-10-18T10:47:19.590 回答
0

环境

set names 'utf8'

在进行查询之前,通常可以进行拉丁语查找。我不确定这是否也适用于阿拉伯语。

于 2011-05-06T19:46:47.980 回答
0

我找到的最干净的解决方案是:

SELECT arabic_word 
FROM Word
WHERE ( arabic_word REGEXP '{$search}' OR SOUNDEX( arabic_word ) = SOUNDEX( '{$search}' ) );

我还没有检查 SOUNDEX 功能的成本。我想这可能适用于小表,但不适用于大型数据集。

于 2012-08-22T14:48:12.670 回答