0

在 RDS 中,我最近创建了我的 prod 数据库的转储,并使用以下命令创建了一个临时 MySQL 5.6 数据库:

mysqldump -u user --password=password -h host db_name | gzip -c > mysql.sql.gz
gunzip mysql.sql.gz
mysql -u user --password=password -h host db_name < mysql.sql

一切正常。我注意到的一个问题是我的应用程序(Django 1.4)创建了如下定义的时间戳:

`last_modified` timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP,

以前在 MySQL 5.5 中这很好。但在 5.6 中,nullforlast_modified不会被解释为当前值。有没有办法处理这个问题?我所有的模型都有这个问题....

编辑

我将上述字段更新为:

alter table my_table modify last_modified timestamp DEFAULT CURRENT_TIMESTAMP

但是在插入时,Django 有一个null用于该字段的。以前 null 转换为当前时间戳,现在它只是null在字段中显示。有没有办法强制 MySQL 解释null为当前时间戳?

4

1 回答 1

4

从 MySQL 文档从 MySQL 5.5 升级到 5.6

声明为 NOT NULL 且没有显式 DEFAULT 子句的 TIMESTAMP 列被视为没有默认值。对于未为此类列指定显式值的插入行,结果取决于 SQL 模式。如果启用严格的 SQL 模式,则会发生错误。如果未启用严格 SQL 模式,则为该列分配隐式默认值“0000-00-00 00:00:00”并出现警告。这类似于 MySQL 如何处理其他时间类型,例如 DATETIME。

所以你应该为这个字段设置CURRENT_TIMESTAMPas是不够的。DEFAULTON UPDATE

于 2013-09-21T09:56:20.353 回答