【发布时间】:2014-04-04 10:33:41
【问题描述】:
我刚刚花了几个小时来追踪这个错误。给定以下 SQL:
DROP DATABASE IF EXISTS db;
CREATE DATABASE db;
CREATE TABLE db.tbl (t1 TIMESTAMP) ENGINE=INNODB;
SHOW CREATE TABLE db.tbl;
最后一行告诉我:
'CREATE TABLE `tbl` (
`t1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1'
NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 到底是从哪里来的?我没有写任何这些,而且我非常不想要任何这些,而且我有点迷失了 MySQL 会做出这样的假设的话。
我是否打开/关闭了一些疯狂的晦涩配置选项?这是默认行为吗?这是一个错误?无论如何,我怎样才能让 MySQL 表现得理智?
【问题讨论】:
-
您可能想要
datetime而不是timestamp。timestamp用于版本控制记录,如果记录更新,默认行为是更新该列。 -
@juergend 谢谢。 The MySQL documentation 并没有明确说明这就是
TIMESTAMP类型的用途。写该文件的人应该被带到外面并枪杀。 -
我想你已经知道了,但文档说 «TIMESTAMP 数据类型提供自动初始化和更新到当前日期和时间» 并链接到 Automatic Initialization and Updating for TIMESTAMP。作家不应该超过一句话。
-
@ÁlvaroG.Vicario 我只是偶然发现了这种行为并阅读了文档,但我没想到offer会强加给我 ;-)