Ошибка «Incorrect integer value ‘NULL’ for column ‘XXX’ at row 1» после обновления MySQL

Памятки и заметки Скрипты и Кодинг

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

Incorrect integer value 'NULL' for column 'XXX' at row 1

Не стоит пугаться, расстраиваться и нервничать. Зачастую все не так страшно.

В большинстве ситуаций, все решается довольно просто. Если посмотрев файл и найдя ту строку, на которую указывает ошибка и видите запрос следующего вида:

INSERT INTO XXX VALUES ('NULL', ...)

Вам достаточно просто изменить ваш запрос, приведя его к такому формату:

INSERT INTO XXX VALUES (NULL, ...)

Приведя запрос к новому формату, вы будете подавать в базу именно то, что она ожидает и на этом можно остановиться и проверить работу вашего скрипта.

Если вы пропустили «манипуляции руками», мы просто ‘NULL’, заменили на NULL, .

Чтобы разобраться в ситуации, необходимо понимать, предыдущий вариант вашего запроса, с одной стороны тоже правильный и если код у вас старый или просто работает давно и вполне мог работать бы и дальше, но при обновлении MySql скорее всего обновился файл настроек и включился «строгий режим» с более тщательной проверкой всех параметров при работе. В этом режиме для базы MySQL ‘NULL’ это совсем не тоже же самое что просто NULL, тут столбец ожидает числовых данных, а в запрос уходит вообще без ничего или с данными отличными от цифровых, что и вызывает данную ошибку.

Есть еще один способ, при котором не нужно править ваш код и запросы, однако придется поменять режим работы самой MySql. Вам будет необходимо отключить строгий режим MySQL, переключив его на «обычный режим», настройках вашего сервера. Если это ваш сервер, придется это сделать самостоятельно, в случае с хостингом — необходимо обращаться в службу поддержки вашего хостинга.

Необходимо открыть файл настроек «my.ini» в каталоге установки MySQL и найти следующую строку (обязательно сделав резервную копию файла настроек):

# Set the SQL mode to strict
sql_mode ="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

или

sql_mode = STRICT_TRANS_TABLES

Далее заменить ее на:

# Set the SQL mode to strict
sql_mode ="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Как вариант, можно попробовать в файле, где у вас прописаны свойства подключения, принудительно задать параметр (помогает не всегда):

SET @@global.sql_mode= '';

Еще стоит помнить, что данный столбец должен быть AUTO_INCREMENT

 

Отблагодарить автора

3 минуты на чтение (0) комментарий

Ваш отзыв очень важен для Авторов этого блога. Критика, отзывы, дополнения и уточнения, вопросы, мотивируют развиваться и работать над собой и своими ошибками. Отклик на публикации, позволяет понять полезен ли материал, стоит ли создавать продолжение, дополнять или исправлять уже имеющийся материал, развивая блог и делая его полезнее.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *