Это вызвано режимом STRICT_TRANS_TABLES
MySQL.С Документация по MySQL 5.7 :
Строгий режим контролирует, как MySQL обрабатывает недопустимые или отсутствующие значения в операторах изменения данных, таких как INSERT или UPDATE.Значение может быть недействительным по нескольким причинам.Например, он может иметь неправильный тип данных для столбца или может быть вне диапазона.Значение отсутствует, если новая вставляемая строка не содержит значения для столбца, отличного от NULL, который не имеет явного предложения DEFAULT в своем определении.(Для столбца NULL NULL вставляется, если значение отсутствует.) Строгий режим также влияет на операторы DDL, такие как CREATE TABLE.
Если строгий режим не действует, MySQL вставляет скорректированные значения для недопустимых или отсутствующих значений.и выдает предупреждения (см. Раздел 13.7.5.40, «Синтаксис ПОКАЗАТЬ ПРЕДУПРЕЖДЕНИЯ»).В строгом режиме вы можете создать это поведение, используя INSERT IGNORE или UPDATE IGNORE.
Для операторов типа SELECT, которые не изменяют данные, недопустимые значения генерируют предупреждение в строгом режиме, а не ошибку.
Чтобы проверить, включен ли режим STRICT_TRANS_TABLES
, выполните следующий запрос:
SHOW VARIABLES LIKE 'sql_mode';
Чтобы отключить строгий режим, вызовите следующий запрос после подключения к базе данных (в вашем приложениикод):
SET GLOBAL sql_mode='';
ИЛИ
SET sql_mode='';
GLOBAL
требует привилегий суперпользователя, и это гарантирует, что изменение будет применено ко всем клиентам, подключающимся к серверу.Однако обратите внимание , что метод SET GLOBAL
не сделает изменения постоянными.Он будет работать только до тех пор, пока сервер MySQL не будет перезапущен.Чтобы сделать изменения постоянными, вам нужно будет внести изменения в mysqld конфигурационные файлы.В более старых версиях MySQL на сервере (ах) Linux (например, для Ubuntu) существует один файл конфигурации /etc/mysql/mysql.cnf
, в который вы добавляете эти изменения ниже подраздела [mysqld]
.
В более новых версиях, например, для сервера Ubuntu, файл будет выглядеть так: /etc/mysql/mysql.conf.d/mysqld.cnf
Хотя вам действительно следует установить значения по умолчанию для столбцов таблицы.В случае этих полей даты вы можете установить значение по умолчанию null
:
CREATE TABLE `posts` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NUL,
`date` date DEFAULT NULL,
`content` varchar(255) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;