- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
例如我想创建一个类字符,ara digit [٩-٠]
.. content all digits.
对应的Unicode是[U+0660-U+0669]
,我试过这个:
Select * FROM employees WHERE ID REGEXP [\u{0660}-\u{0669}];
我收到这个错误
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[\u{0660}-\u{0669}] LIMIT 0, 25' at line 1"
最佳答案
https://dev.mysql.com/doc/refman/5.7/en/regexp.html说
Warning
The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multibyte safe and may produce unexpected results with multibyte character sets. In addition, these operators compare characters by their byte values and accented characters may not compare as equal even if a given collation treats them as equal.
也就是说,如果您在正则表达式中使用 Ã
,它会将 2 字节的 utf8 代码视为 2 字节(十六进制)C3
和 83
。如果这给了您“正确”的答案,那更多的是“运气”而不是设计。
这确实有效:
mysql> SELECT '١' REGEXP '[٩-٠]';
+-----------------------+
| '١' REGEXP '[٩-٠]' |
+-----------------------+
| 1 |
+-----------------------+
但是,这只是巧合。正则表达式类似于 [x0-x9]
,其中 x 是 D9 字节,0 是 A0,9 是 A9。但是正则表达式是“任何字符 x
,或介于 0
和 x
之间,或 9
,这不是你想要什么。
这可能适用于“所有”阿拉伯语:REGEXP UNHEX('5BD82DDD5D')
,但这只是因为“所有”以十六进制 D8 到 DD 开头。 (但是,该范围内可能还有其他内容。)此外,它只会检查“字符串是否包含阿拉伯字母;它不能用于任何更复杂的内容,例如短语或字母子集。
回到数字范围。仅检查十六进制 D9
是不安全的,因为这将包括百分号、上标字母和其他字符。这可能有效:REGEXP UNHEX('D95BA02DA95D')
。
警告:我在此回答中所说的大部分内容都未经测试;我正在一个我没有经验的领域(使用 utf8 的 REGEXP)发明一个解决方案。
关于mysql - 如何使用 RegExp 在 MySQL 中创建阿拉伯字符类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38425054/
我在 mysql 数据库中有一个“价格”字段,其中包含以阿拉伯或波斯数字表示的产品价格。 数字示例:12345567890 //1234567890 我不知道如何格式化它以便以用户友好的方式格式化。我
由于单独使用 prawn gem 时阿拉伯字母显示为未知字符,因此我安装了 Arabic-Prawn gem 0.0.1 以阿拉伯语打印数据。我用下面的代码作为测试 Prawn::Document.g
我是一名优秀的程序员,十分优秀!