这是感兴趣的领域:
something VARCHAR(8) NULL,
它可以包含非数字,但我需要选择在此字段中仅包含数字的行。我尝试使用此正则表达式:
something RLIKE '^\d+$'
这不匹配。但是,如果我在末尾为空字节添加 Kleene 闭包,它会匹配。这是匹配的表达式:
something RLIKE '^\d+x00*$'
我的问题是:我做错了什么吗?有没有我应该设置的标志?我在任何地方的文档中都没有看到这一点。MariaDB 的文档没有提到用空字节填充VARCHAR
s。事实上,他们文档中的一节给我留下的印象是我的第一个正则表达式应该有效。以下是文档中的引述:
此示例检查字符串是否仅由"word"字符组成:
SELECT 'abc' RLIKE '^\w+$';
-> 1
您不提供版本或代码示例,但以下内容在具有默认设置的 MariaDB 10.3.9 中工作:
CREATE TABLE r (x VARCHAR(8) NULL);
INSERT INTO r VALUES ('abc'),('123'),('1d3');
SELECT x RLIKE '^\d+$' FROM r;
+------------------+
| x RLIKE '^\d+$' |
+------------------+
| 0 |
| 1 |
| 0 |
+------------------+
https://mariadb.com/kb/en/library/server-system-variables/#default_regex_flags 有一些行为标志,但我不知道这是否与您的情况相关。