MySQL CURRENT_TIMESTAMP错误解析DDL几微秒

问题描述 投票:1回答:3

这是我想要的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 timestamp workbench
3个回答
3
投票

不兼容的更改:在非常旧的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)

0
投票

是时间戳不再需要这个,我通常只使用它与DEAFAULT或ON UPDATE CURRENT_TIMESTAMP,你可能会发现它们有用。


0
投票

一些变种可供选择:

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)。它在会话的活动时区中呈现。

© www.soinside.com 2019 - 2024. All rights reserved.