这是我想要的MySQL表,但专注于datum_en_tijd
:
CREATE TABLE `navigatie` (
`navigatie_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`navigatie_id`),
`huidige_vraaggroep` varchar(255) NOT NULL,
`vorige_vraaggroep` varchar(255) DEFAULT NULL,
`richting` varchar(255) NOT NULL,
`datum_en_tijd` timestamp(3) NOT NULL,
`schadegeval_id` bigint(20) UNSIGNED DEFAULT NULL,
`claim_id` bigint(20) UNSIGNED DEFAULT NULL,
`gebruiker_id` bigint(20) NOT NULL,
`soort_gebruiker` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
正如你所看到的,TIMESTAMP
与(3)
相差几毫秒
每当我在MySQL Workbench中尝试Alter Table ...时,我都会收到此错误:
当我查看DDL时,我得到一个带有此查询的新选项卡:
delimiter $$
CREATE TABLE `navigatie` (
`navigatie_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`huidige_vraaggroep` varchar(255) NOT NULL,
`vorige_vraaggroep` varchar(255) DEFAULT NULL,
`richting` varchar(255) NOT NULL,
`datum_en_tijd` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`schadegeval_id` bigint(20) unsigned DEFAULT NULL,
`claim_id` bigint(20) unsigned DEFAULT NULL,
`gebruiker_id` bigint(20) NOT NULL,
`soort_gebruiker` varchar(255) NOT NULL,
PRIMARY KEY (`navigatie_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
请注意更改
`datum_en_tijd` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
这是一个错误还是什么?另请注意第8行的SYNTAX ERROR MySQL WorkBench为我们提供了:我正在运行MySQL 5.6.16
不兼容的更改:在非常旧的MySQL版本(4.1之前)中,TIMESTAMP数据类型支持显示宽度,从MySQL 4.1开始,它被默默忽略。这在MySQL 5.1中已弃用,并在MySQL 5.5中完全删除。当尝试将TIMESTAMP(N)列与MySQL 5.5或更高版本的服务器一起使用时,这些行为更改可能导致两个问题场景:
When importing a dump file (for example, one created using mysqldump) created in a MySQL 5.0 or earlier server into a server from
较新的发行版系列,包含TIMESTAMP(N)的CREATE TABLE或ALTER TABLE语句会导致导入失败并出现语法错误。
To fix this problem, edit the dump file in a text editor to replace any instances of TIMESTAMP(N) with TIMESTAMP prior to
导入文件。一定要使用纯文本编辑器,而不是文字处理器;否则,结果几乎肯定无法导入MySQL服务器。
http://dev.mysql.com/doc/refman/5.1/en/timestamp-initialization.html
所以你不能拥有
`datum_en_tijd` timestamp(3)
相反,你需要使用
`datum_en_tijd` timestamp
要么
`datum_en_tijd` datetime(3)
是时间戳不再需要这个,我通常只使用它与DEAFAULT或ON UPDATE CURRENT_TIMESTAMP,你可能会发现它们有用。
一些变种可供选择:
created_at
timestamp(3)NOT NULL DEFAULT'1970-01-01 12:34:56'
mysql_row_created_at
timestamp(3)NOT NULL DEFAULT CURRENT_TIMESTAMP(3)
created_at
timestamp(3)NULL DEFAULT NULL
每个人都有自己的优点和缺点。
不要(曾经)使用datetime,因为它没有相关的时区,它主要只是一个(打包的)字符串。
MySQL时间戳类型以物理方式存储在UTC中(它是UNIX-epoch delta)。它在会话的活动时区中呈现。