Почему оператор конца строки ($) не работает в MariaDB, если я не включаю завершающий ноль? - PullRequest
0 голосов
/ 23 сентября 2018

Это поле интереса:

something    VARCHAR(8)          NULL,

Может содержать не цифры, но мне нужно выбрать строки, которые содержат только цифры в этом поле.Я пытался использовать это регулярное выражение:

something RLIKE '^\\d+$'

Это не соответствует.Однако, если я добавлю замыкание Клини для нулевых байтов в конце, оно совпадет.Это выражение соответствует:

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

Мой вопрос: я что-то не так делаю? Есть ли флаг, который я должен был установить?Я не вижу нигде упомянутого в документации.В документации MariaDB не упоминается заполнение VARCHAR s нулевыми байтами.Фактически, раздел в их документации оставляет у меня впечатление, что мое первое регулярное выражение должно было сработать.Вот цитата из документации:

В этом примере проверяется, состоит ли строка только из словесных символов:

SELECT 'abc' RLIKE '^\\w+$';
-> 1

1 Ответ

0 голосов
/ 24 сентября 2018

Вы не предоставляете версии или примеры кода, но в 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 имеет некоторые флаги поведения, но я нене знаю, относится ли это к вашему делу.

...