Problems with strict mode in mysql 5.7

In mysql 5.7, strict mode is used by default, which is sometimes too strict, causing problems,

such as:
mysql> CREATE TABLE `events_t` (
-> `id` int(11) NOT NULL AUTO_INCREMENT,
-> ` event_date` datetime NOT NULL,
-> `profile_id` int(11) DEFAULT NULL,
-> PRIMARY KEY (`id`),
-> KEY `event_date` (`event_date`),
-> KEY `profile_id` (`profile_id` )
-> ) ENGINE=InnoDB DEFAULT CHARSET=latin1
-> ;
Query OK, 0 rows affected (0.02 sec)
mysql> insert into events_t (profile_id) values ​​(1);
ERROR 1364 (HY000): Field 'event_date' doesn't have a default value

Here, the date must have a default value, not NULL, but:
mysql> alter table events_t change event_date event_date datetime NOT NULL default '0000-00-00 00:00: 00';
ERROR 1067 (42000): Invalid default value for 'event_date'
mysql> alter table events_t change event_date event_date datetime NOT NULL default '2000-00-00 00:00:00';
ERROR 1067 (42000): Invalid default value for 'event_date '

Also not possible, there must be a real date default
mysql> alter table events_t change event_date event_date datetime NOT NULL default '2000-01-01 00:00:00';
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates : 0 Warnings: 0
mysql> insert into events_t (profile_id) values ​​(1);
Query OK, 1 row affected (0.00 sec)

so only the date format is changed to timestamp, or NULL is used, or now() is used when inserting Date,
if you don't use the default mode, you can do this:
mysql> set global SQL_MODE="NO_ENGINE_SUBSTITUTION";

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326585254&siteId=291194637