mysql更新错误日期时间值不正确

rta7y2nd  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(383)

我们的数据库使用“0000-00-00:00:00”作为许多datetime和timestamp字段的默认值。mysql显然已经决定,他们只希望我们对这些类型的字段使用有效的日期或null。
但是,“0000-00-00:00:00”值过去是可以接受的,我们的代码会检查该值。在设置新服务器时,我编辑/etc/mysql/mysql.conf.d/mysqld.cnf文件并在[mysqld]部分添加一行。

sql_mode=NO_ENGINE_SUBSTITUTION

今天我尝试安装一个新服务器。我添加了 sql_mode=NO_ENGINE_SUBSTITUTION 重新启动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

我当然可以更新数据库,使其具有空值或“有效”的默认日期,例如“1970-01-01 00:00:01”,但这将破坏检查“0000-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”。

velaa5lx

velaa5lx1#

这个 NO_ENGINE_SUBSTITUTION sql模式与日期无关。它只对您起到了作用,因为通过设置它,您还删除了服务器的默认模式,在现代版本中,这种模式与 TRADITIONAL ,这是一种组合模式,其中包括 NO_ZERO_IN_DATE 以及 NO_ZERO_DATE .
您可能只想在会话级别设置此应用程序的旧模式,例如:

SET @@SESSION.sql_mode = '';

相关问题