字符 class 不适用于阿拉伯文本列
Character class is not working for Arabic text column
根据定义 MySQL 字符 class [...] 匹配括号内的任何字符。所以我将它用于阿拉伯字符。它每次都给我空集。
这是我的查询:
select hadith_raw_ar from view_hadith_in_book where hadith_raw_ar like '%[بل]ت';
Be definition mySQL character class [...] matches any character within
the brackets.
嗯,那不准确。字符 class 实际上是正则表达式的一部分, 而不是 MySQL。但是,您仍然可以使用带 MySQL 的正则表达式,当然,您需要使用关键字 REGEXP
而不是 LIKE
.
现在,如果您尝试匹配以您的角色 class 中代表的任何字符开头的任何内容,您应该使用类似于 ^[...]
的正则表达式模式,您可以在其中替换...
加上你想要的字符。
所以,在你的情况下,你需要这样的东西:
SELECT hadith_raw_ar FROM view_hadith_in_book WHERE hadith_raw_ar REGEXP '^[تبل]';
相当于:
SELECT hadith_raw_ar
FROM view_hadith_in_book
WHERE hadith_raw_ar LIKE 'ت%' OR
hadith_raw_ar LIKE 'ب%' OR
hadith_raw_ar LIKE 'ل%';
..当不使用正则表达式时。
参考文献:
使用utf8_general_ci集合插入任何语言字符
对于旧版本,您不能将字符 classes 与 LIKE 或 RLIKE 和非 latin1 字符集一起使用。 (至少不会,并期望得到正确的结果。)
REGEXP
很蹩脚。它只看字节;您的字符 class 中的 6 个字节,其中一些是重复的。这是十六进制:D8 AA D8 A8 D9 84
.
有时你会碰巧从REGEXP
得到'right'答案。 MariaDB 有一个不错的 REGEXP。例如,SELECT '٪' REGEXP '[تبل]';
returns 为真。请注意,我正在测试阿拉伯百分号 - 十六进制 D9AA
。请注意我是如何选择 D9 的,它存在于一些阿拉伯字符和 AA 中。
MySQL 8.0 手册暗示 REGEXP 可能适用于阿拉伯语。 (但不适用于 Emoji 和一些汉字。)MariaDB 从 10.0.5 开始就内置了 PCRE。
根据定义 MySQL 字符 class [...] 匹配括号内的任何字符。所以我将它用于阿拉伯字符。它每次都给我空集。 这是我的查询:
select hadith_raw_ar from view_hadith_in_book where hadith_raw_ar like '%[بل]ت';
Be definition mySQL character class [...] matches any character within the brackets.
嗯,那不准确。字符 class 实际上是正则表达式的一部分, 而不是 MySQL。但是,您仍然可以使用带 MySQL 的正则表达式,当然,您需要使用关键字 REGEXP
而不是 LIKE
.
现在,如果您尝试匹配以您的角色 class 中代表的任何字符开头的任何内容,您应该使用类似于 ^[...]
的正则表达式模式,您可以在其中替换...
加上你想要的字符。
所以,在你的情况下,你需要这样的东西:
SELECT hadith_raw_ar FROM view_hadith_in_book WHERE hadith_raw_ar REGEXP '^[تبل]';
相当于:
SELECT hadith_raw_ar
FROM view_hadith_in_book
WHERE hadith_raw_ar LIKE 'ت%' OR
hadith_raw_ar LIKE 'ب%' OR
hadith_raw_ar LIKE 'ل%';
..当不使用正则表达式时。
参考文献:
使用utf8_general_ci集合插入任何语言字符
对于旧版本,您不能将字符 classes 与 LIKE 或 RLIKE 和非 latin1 字符集一起使用。 (至少不会,并期望得到正确的结果。)
REGEXP
很蹩脚。它只看字节;您的字符 class 中的 6 个字节,其中一些是重复的。这是十六进制:D8 AA D8 A8 D9 84
.
有时你会碰巧从REGEXP
得到'right'答案。 MariaDB 有一个不错的 REGEXP。例如,SELECT '٪' REGEXP '[تبل]';
returns 为真。请注意,我正在测试阿拉伯百分号 - 十六进制 D9AA
。请注意我是如何选择 D9 的,它存在于一些阿拉伯字符和 AA 中。
MySQL 8.0 手册暗示 REGEXP 可能适用于阿拉伯语。 (但不适用于 Emoji 和一些汉字。)MariaDB 从 10.0.5 开始就内置了 PCRE。