【发布时间】:2018-09-23 13:20:04
【问题描述】:
这是感兴趣的领域:
something VARCHAR(8) NULL,
它可以包含非数字,但我需要选择此字段中仅包含数字的行。我尝试过使用这个正则表达式:
something RLIKE '^\\d+$'
这不匹配。但是,如果我在最后为空字节添加一个 Kleene 闭包,它就会匹配。这是匹配的表达式:
something RLIKE '^\\d+\x00*$'
我的问题是:我做错了什么吗?我应该设置一个标志吗?我在任何地方的文档中都没有看到这一点。 MariaDB 的文档没有提到用空字节填充 VARCHARs。事实上,他们文档中的一部分给我留下了我的第一个正则表达式应该有效的印象。这是文档中的引述:
此示例检查字符串是否仅包含“单词”字符:
SELECT 'abc' RLIKE '^\\w+$';
-> 1
【问题讨论】:
-
SELECT HEX(something) ...这样我们就可以看到是否有零字节。 -
VARCHAR使用长度字段实现,后跟字符串中的字节。它在结束时不使用零字节来终止。但是,可能您可以将其放入字符串中。 -
例如,
SELECT HEX (code) FROM UnitedNationsM49Subregions;给了我303632。 -
等一下,这在我的 Mac 上突然起作用了。失败发生在我的 Windows 机器上。这可能与行尾有关吗?
-
中南亚的过时代码?