在SQL 5.7中更改一列的默认值会对另一列发出警告

  • 本文关键字:一列 警告 默认值 SQL sql mysqli
  • 更新时间 :
  • 英文 :


自从SQL 5.7以来,我的客户遇到了更多的问题。我发现的问题之一是:

当我运行一个查询时,我会收到一条关于另一列的消息,这真的很奇怪吗??谁能解释这一点?

mysql> ALTER TABLE advertisement ALTER COLUMN local_name set default 'x';
ERROR 1067 (42000): Invalid default value for 'end_time'

造成此错误的表格如下:

mysql> show columns from advertisement;
+----------------+--------------+------+-----+---------------------+----------------+
| Field          | Type         | Null | Key | Default             | Extra          |
+----------------+--------------+------+-----+---------------------+----------------+
| id             | int(11)      | NO   | PRI | NULL                | auto_increment |
| local_name     | varchar(64)  | NO   |     |                     |                |
| chinese_name   | varchar(64)  | NO   |     |                     |                |
| image          | varchar(128) | NO   |     |                     |                |
| top1           | varchar(128) | NO   |     |                     |                |
| center1        | varchar(128) | NO   |     |                     |                |
| bottom1        | varchar(128) | NO   |     |                     |                |
| bottom2        | varchar(128) | NO   |     |                     |                |
| bottom3        | varchar(128) | NO   |     |                     |                |
| top_colour1    | varchar(16)  | NO   |     |                     |                |
| center_colour1 | varchar(16)  | NO   |     |                     |                |
| bottom_colour1 | varchar(16)  | NO   |     |                     |                |
| bottom_colour2 | varchar(16)  | NO   |     |                     |                |
| bottom_colour3 | varchar(16)  | NO   |     |                     |                |
| start_time     | timestamp    | NO   |     | CURRENT_TIMESTAMP   |                |
| end_time       | timestamp    | NO   |     | 0000-00-00 00:00:00 |                |
| hour           | varchar(64)  | NO   |     |                     |                |
| status         | smallint(6)  | NO   |     | 0                   |                |
+----------------+--------------+------+-----+---------------------+----------------+

这是因为服务器SQL模式-NO_ZERO_DATE

参考:NO_ZERO_DATE-在严格模式下,不允许'0000-00-00'作为有效日期。您仍然可以使用IGNORE选项插入零日期。当不处于严格模式时,会接受日期,但会生成警告。

文档链接

最新更新