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

时间:2018-05-25 05:37:39

标签: mysql regex mysqli wildcard

定义mySQL字符类[...]匹配括号内的任何字符。所以我用它来做阿拉伯字符。它每次给我空集。 这是我的疑问:

void listerine(Directory pat){ //Directory root = new Directory(pat); //var root = Directory.systemTemp; pat.list(recursive: true, followLinks: false).listen((FileSystemEntity entity){ main(List<String> arguments){ var root = new Directory("C:\\"); print(root); listerine(root); }

如果有的话,我真的很感激任何帮助。非常感谢!

3 个答案:

答案 0 :(得分:1)

对于旧版本,您不能使用具有LIKE或RLIKE和非latin1字符集的字符类。 (至少没有,并希望得到正确的结果。)

REGEXP很蹩脚。它只看字节;字符类中的6个字节,其中一些是重复的。这是十六进制:D8 AA D8 A8 D9 84

有时候你将发生以从REGEXP获得“正确”的答案。 MariaDB有一个不错的REGEXP。例如,SELECT '٪' REGEXP '[تبل]';返回true。请注意,我正在测试阿拉伯语百分号 - 十六进制D9AA。请注意我如何选择D9,它存在于一些阿拉伯字符和AA中。

MySQL 8.0手册暗示REGEXP可能适用于阿拉伯语。 (但不适用于表情符号和一些中文字符。)自10.0.5以来,MariaDB内置了PCRE。

答案 1 :(得分:0)

  

定义mySQL字符类[...]匹配其中的任何字符   括号。

嗯,那不准确。字符类实际上是Regex的一部分,不是MySQL 。但是,您仍然可以将Regex与MySQL结合使用,但是您需要使用关键字REGEXP而不是LIKE

现在,如果您尝试匹配以字符类中表示的任何字符开头的任何内容,那么您应该使用类似^[...]的正则表达式模式来替换...用你想要的角色。

所以,在你的情况下,你需要这样的东西:

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

..不使用正则表达式。

参考文献:

答案 2 :(得分:0)

使用utf8_general_ci集合插入任何语言字符