Это результат Режим строгого SQL , включенный по умолчанию в более новых версиях MySQL.
Когда строгий режим отключен, опуская значение для столбца, который объявлен NOT NULL
и не имеет явного значения DEFAULT
, выдает предупреждение и принимает автоматическое значение по умолчанию.Для VARCHAR
это автоматическое значение по умолчанию - пустая строка.
Когда включен строгий режим, это условие вызывает ошибку, если вы не используете INSERT IGNORE
.
Нет конкретного режима SQL, который простоконтролирует это поведение;если вы хотите отключить эту проверку, вам нужно полностью отключить строгий режим.Поскольку строгий режим может привести к другим несовместимостям (например, ONLY_FULL_GROUP_BY
ошибки), это может быть наиболее целесообразным способом для вас выполнить миграцию.
Но если вы просто хотите справиться с этой конкретной ошибкой, лучшим решением будет объявить явное значение по умолчанию в схеме:
create table null_test(not_null VARCHAR(255) NOT NULL DEFAULT '');