Однажды может случиться так, что после обновления 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
К этой записи нет комментарий. Ваш будет первым!