定义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);
}
如果有的话,我真的很感激任何帮助。非常感谢!
答案 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)
嗯,那不准确。字符类实际上是Regex的一部分,不是MySQL 。但是,您仍然可以将Regex与MySQL结合使用,但是您需要使用关键字定义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集合插入任何语言字符