mysql字符类不适用于阿拉伯语文本列

4xy9mtcn  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(338)

be definition mysql character class[…]匹配方括号中的任何字符。所以我用它来表示阿拉伯字符。它每次都给我空套。我的问题是: select hadith_raw_ar from view_hadith_in_book where hadith_raw_ar like '%[بل]ت'; 如果有任何帮助,我都会非常感激。非常感谢!

suzh9iv8

suzh9iv81#

be definition mysql character class[…]匹配方括号中的任何字符。
嗯,那不准确。character类实际上是regex的一部分,而不是mysql。当然,您仍然可以在mysql中使用regex,但是您需要使用关键字 REGEXP 而不是 LIKE .
现在,如果您试图匹配以character类中表示的任何字符开头的任何内容,那么应该使用类似 ^[...] 在那里你可以替换 ... 你想要的角色。
所以,在你的情况下,你需要这样的东西:

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 'ل%';

..不使用正则表达式时。

参考文献:

正则表达式:字符类或字符集。
在mysql中使用正则表达式。

zsbz8rwp

zsbz8rwp2#

对于旧版本,不能将字符类与like或rlike以及非拉丁字符集一起使用(至少不会,希望得到正确的结果。) REGEXP 是瘸子。它只看字节;字符类中的6个字节,其中一些是重复的。这是魔咒: D8 AA D8 A8 D9 84 .
有时你会碰巧从别人那里得到“正确”的答案 REGEXP . mariadb有一个不错的regexp。例如, SELECT '٪' REGEXP '[تبل]'; 返回true。注意,我正在测试一个阿拉伯语百分号-hex D9AA . 注意我是如何选择d9的,它存在于一些阿拉伯语字符和aa中。
mysql 8.0手册暗示regexp可以正确地用于阿拉伯语(mariadb从10.0.5开始就内置了pcre。

sycxhyv7

sycxhyv73#

使用utf8\u general\u ci集合插入任何语言字符

相关问题