Ошибка «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