MySQL 'Усеченное неверное значение INTEGER' - PullRequest
10 голосов
/ 09 февраля 2011

Я получаю странную ошибку «Усеченное неверное значение INTEGER» при выполнении следующего запроса ОБНОВЛЕНИЕ:

update tbl
set projectNumber = right(comments, 7)
where createdBy = 'me'
and length(CONVERT(right(comments, 7), SIGNED INTEGER)) = 7 
and CONVERT(right(comments, 7), SIGNED INTEGER) > 0
and CONVERT(right(comments, 7), SIGNED INTEGER) is not null
and createdOn > '2011-01-31 12:00:00'
and projectNumber is null

номер_проекта varchar (10).

Когда я запускаю его как прямой выбор, я не получаю сообщение об ошибке и вижу результаты, как и ожидалось. Есть идеи? По сути, я пытаюсь обновить поле projectNumber, в котором конец комментариев в импортированных заметках состоит из 7 числовых символов (но значения projectNumber не являются всегда 7, поэтому поле varchar (10)).

Ответы [ 4 ]

11 голосов
/ 09 февраля 2011

Это не ошибка.Это предупреждение, которое приходит от CONVERT (), когда вы просите его преобразовать нечисловые числа в целые;

Запустите эти запросы в консоли, чтобы увидеть:

mysql> SELECT CONVERT(right('1s23d45678', 7), SIGNED INTEGER);
+-------------------------------------------------+
| CONVERT(right('1s23d45678', 7), SIGNED INTEGER) |
+-------------------------------------------------+
|                                               3 |
+-------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+---------+------+----------------------------------------------+
| Level   | Code | Message                                      |
+---------+------+----------------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: '3d45678' |
+---------+------+----------------------------------------------+
1 row in set (0.00 sec)

Как я уже сказал, этопредупреждение, а не ошибка.Ваш запрос должен выполнять обновление правильно.

5 голосов
/ 23 декабря 2015

Другая распространенная причина этого предупреждения - пробел в строке для преобразования.Используйте trim() перед convert(), чтобы избавиться от этого.

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

Я нашел одно решение, которое из коробки и может быть легко реализовано.Решение очень похоже на SET ANSI_WARNING OFF в MS SQL Server.

В MySQL сначала необходимо проверить, заданы ли настройки для «sql_mode», с помощью следующей команды:

SHOW VARIABLES LIKE 'sql_mode';

OR еще использовать ниже.

SELECT @@GLOBAL.sql_mode;

Там может иметь следующие наборы значения в CSV

ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_ENGINE_SUBSTITUTION

1014 *

Исходя из вашей ошибки, вы можете удалить настройки и сбросить их с помощью следующей команды:

SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

С помощью вышеуказанной команды для ее сброса.Это решило подобное этой проблемы «Усеченное неверное значение INTEGER» в моем случае.Я надеюсь, что это должно работать и от других пользователей, которые сталкиваются с этой проблемой.

Для более подробной информации об этом "sql_mode", пожалуйста, обратитесь к this .

Надеюсь, что этоиспользовать полный!

0 голосов
/ 19 июня 2017

Если вы используете текстовый тип для данных столбца и пытались установить значение по умолчанию как 0, просто установите его как NULL:

ALTER TABLE `__table__` 
CHANGE `__column_name__old__` `__column_name__new__` 
INT(4) NOT NULL DEFAULT '0';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...