MySQL "усеченное неправильное целочисленное значение"

Я получаю нечетное "усеченное неправильное целочисленное значение" ошибка при запуске следующего запроса обновления:

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

projectNumber-varchar (10).

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

3 ответов


Это не ошибка. Это предупреждение, которое приходит от 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)

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


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


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

ALTER TABLE `__table__` 
CHANGE `__column_name__old__` `__column_name__new__` 
INT(4) NOT NULL DEFAULT '0';