代码之家  ›  专栏  ›  技术社区  ›  Jonathan Wilbur

为什么行结束运算符($)在MariaDB中不起作用,除非我包含一个尾随null?

  •  0
  • Jonathan Wilbur  · 技术社区  · 7 年前

    something    VARCHAR(8)          NULL,
    

    它可以包含非数字,但我需要为此字段中仅包含数字的行进行选择。我已尝试使用此正则表达式:

    something RLIKE '^\\d+$'
    

    这是不匹配的。但是,如果我在末尾为空字节添加Kleene闭包,它将匹配。这是与以下内容匹配的表达式:

    something RLIKE '^\\d+\x00*$'
    

    我的问题是: VARCHAR s包含空字节。事实上,他们文档中的一个部分给我的印象是,我的第一个正则表达式应该可以工作。以下是文档中的引用:

    此示例检查字符串是否仅由“word”字符组成:

    SELECT 'abc' RLIKE '^\\w+$';
    -> 1
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Ian Gilfillan    7 年前

    您不提供版本或代码示例,但以下内容在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