четверг, 14 декабря 2017 г.

Решение: General error: 1364 Field ‘MyField’ doesn’t have a default value

После обновления MySql до версии 5.5 начали вылетать непонятные ошибки. Например:
Error: SQLSTATE[HY000]: General error: 1364 Field ‘MyField’ doesn’t have a default value
Связано это с тем, что в новой версии базы включен по умолчанию режим STRICT_TRANS_TABLES.
Проверить это можно следующим запросом:
1
SELECT @@GLOBAL.sql_mode
В результате увидите что-то вроде:

STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

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

1
SET GLOBAL sql_mode='NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION'
Теперь проверим отключился ли режим:
1
SELECT @@GLOBAL.sql_mode
Увидим что отключен.
Но это не все, после перезагрузки MySql режим снова включится. Для того, что-бы избежать это необходимо удалить этот режим из конфигурационного файла my.ini.
Находим там строчку:
1
sql-mode='бла-бла-бла'

и удаляем из неё STRICT_TRANS_TABLES. Перезагружаем MySql.

IT-записки

comments powered by Disqus