MariaDB 10.3 неявное приведение строкового параметра к целочисленному столбцу завершается неудачно - PullRequest
0 голосов
/ 16 мая 2019

После обновления с MariaDB 10.0.x до 10.3.x значение SELECT, содержащее целочисленную строку в кавычках, например «3», более неявно приводится к значению столбца INTEGER, что приводит к ошибке запроса, 1366, Неверное целочисленное значение. Есть ли способ включить неявные преобразования?

Несколько настроек SQL_MODE были предприняты для решения этой проблемы, но безрезультатно. Вот простой пример сценария.

CREATE TABLE IF NOT EXISTS database.tablename (
   col1 INTEGER UNSIGNED,
   col2 INTEGER UNSIGNED,
   PRIMARY KEY (col1)) ENGINE = MEMORY;
INSERT INTO database.tablename VALUES (1,'2');

Ошибка запроса (1366): неверное целочисленное значение: '' для столбца 'база данных', 'имя таблицы', 'col2' в строке 1

Я ожидаю, что запрос будет выполнен успешно, когда столбец 2 неявно приведен к INTEGER UNSIGNED, как это произошло в MariaDB 10.0.x.

1 Ответ

0 голосов
/ 16 мая 2019

Я выяснил, что происходит.

Включение режима STRICT_TRANS_TABLES выявляет проблему в определениях таблиц, где значение по умолчанию не предоставляется для столбца INTEGER.Это была новая проблема для нас в MariaDB 10.3 из-за изменений по умолчанию SQL_MODE между MariaDB 10.0.38 и 10.3.15, которые включают STRICT_TRANS_TABLES.Это может быть исправлено удалением флага.

Удаление флага при MariaDB, запущенном с подключенным процессом

set sql_mode = "";set GLOBAL sql_mode = "";

не изменяет поведение INSERT до тех пор, пока процесс соединения не будет перезапущен и его соединение с базой данных не будет сброшено.После этого применяются правила значений по умолчанию для типа данных, и запрос INSERT выполняется без ошибок.

Таким образом, проблема заключалась не в том, что в запросе указан тип данных integer, а в том, что не было целого числа.значение по умолчанию для столбца, когда STRICT_TRANS_TABLES оставался включенным для соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...