Ошибка обновления MySQL Неверное значение даты и времени - PullRequest
0 голосов
/ 11 июня 2018

Наша база данных использует «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'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...