Наша база данных использует «0000-00-00 00:00:00» в качестве значения по умолчанию для многих полей даты и времени.MySQL, очевидно, решил, что они хотят, чтобы мы использовали только действительную дату или нуль для этих типов полей.
Однако значения '0000-00-00 00:00:00' были приемлемыми, и нашиКод проверяет это значение.Когда я настраиваю новый сервер, я редактирую файл /etc/mysql/mysql.conf.d/mysqld.cnf и добавляю одну строку в раздел [mysqld].
sql_mode=NO_ENGINE_SUBSTITUTION
Сегодня я попыталсянастроить новый сервер.Я добавил sql_mode=NO_ENGINE_SUBSTITUTION
в конфигурацию MySQL и перезапустил службу mysql.Однако этот новый сервер только получает ошибки.
UPDATE example_table SET active = 1 WHERE example_table_id = 1;
ERROR 1292 (22007): Incorrect datetime value: '0000-00-00 00:00:00' for column 'my_date_field' at row 1
Я, конечно, мог бы обновить базу данных, чтобы иметь значения NULL или «действительную» дату по умолчанию, такую как «1970-01-01 00:00:01», но этот сломает существующий код , который проверяет данные для '0000-00-00 00:00:00'.
Дополнительная информация о примере:
Server type: MySQL
Server version: 5.7.22-0ubuntu0.16.04.1 - (Ubuntu)
Protocol version: 10
innodb_version: 5.7.22
SELECT my_date_field FROM example_table WHERE active = 1;
+---------------------+
| my_date_field |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+
DESC example_table;
+------------------------------------+--------------+------+-----+---------------------+
| Field | Type | Null | Key | Default |
+------------------------------------+--------------+------+-----+---------------------+
| my_date_field | datetime | NO | | 0000-00-00 00:00:00 |
| active | tinyint(2) | NO | | 1 |
+------------------------------------+--------------+------+-----+---------------------+
У меня есть другие машины с той же версией MySQL, работающие только с sql_mode=NO_ENGINE_SUBSTITUTION
, и я почти готов представить себе одну из них для этой новой машины, пока не обновится код для поиска действительногодата или ноль вместо '0000-00-00 00:00:00'.