在RDS中,我最近创建了一个我的prod db的转储,并使用以下命令创建了一个临时的MySQL 5.6 db:
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中,null
的{{1}}未被解释为当前值。无论如何要处理这个问题?我的所有模特都有这个问题......
修改
我将上述字段更新为:
last_modified
但是在插入时,Django对该字段有一个alter table my_table modify last_modified timestamp DEFAULT CURRENT_TIMESTAMP
。以前将null转换为当前时间戳,现在它只是在字段中显示为null
。有没有办法强制MySQL将null
解释为当前时间戳?
答案 0 :(得分:4)
来自MySQL文档Upgrading from MySQL 5.5 to 5.6
TIMESTAMP列声明为NOT NULL且没有显式DEFAULT 子句被视为没有默认值。对于插入的行 为这样的列指定没有显式值,结果取决于 SQL模式。如果启用了严格的SQL模式,则会发生错误。如果严格 未启用SQL模式,将为该列分配隐式默认值 '0000-00-00 00:00:00'并发出警告。这与如何相似 MySQL处理其他时间类型,例如DATETIME。
因此,您应该为此字段设置CURRENT_TIMESTAMP
为DEFAULT
,ON UPDATE
是不够的。