首页 > 解决方案 > 字符类不适用于阿拉伯语文本列

问题描述

根据定义 MySQL 字符类 [...] 匹配括号内的任何字符。所以我将它用于阿拉伯字符。它每次都给我空集。这是我的查询:

select hadith_raw_ar from view_hadith_in_book where hadith_raw_ar like '%[بل]ت';

标签: mysqlregexwildcard

解决方案


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

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

有时您会碰巧从中得到“正确”的答案REGEXP。MariaDB 有一个不错的正则表达式。例如,SELECT '٪' REGEXP '[تبل]';返回 true。请注意,我正在测试阿拉伯百分号 - 十六进制D9AA。请注意我是如何选择 D9 的,它存在于一些阿拉伯字符和 AA 中。

MySQL 8.0 手册暗示 REGEXP 可能适用于阿拉伯语。(但不适用于表情符号和一些汉字。) MariaDB 从 10.0.5 开始就内置了 PCRE。


推荐阅读