Django 1.4与MySQL 5.6

时间:2013-09-21 02:05:30

标签: django mysql-5.6

在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解释为当前时间戳?

1 个答案:

答案 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_TIMESTAMPDEFAULTON UPDATE是不够的。