首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL CURRENT_TIMESTAMP错误解析DDL微秒

MySQL CURRENT_TIMESTAMP错误解析DDL微秒
EN

Stack Overflow用户
提问于 2014-05-05 10:13:52
回答 3查看 1.4K关注 0票数 1

这是我想要的MySQL表,但重点是datum_en_tijd

代码语言:javascript
复制
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工作台中,我得到了以下错误:

当我查看DDL时,我会得到一个带有以下查询的新选项卡:

代码语言:javascript
复制
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$$

请注意

代码语言:javascript
复制
`datum_en_tijd` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),

这是个窃听器还是什么?还请注意MySQL WorkBench提供的第8行的语法错误:

我正在运行MySQL 5.6.16

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-05 10:18:42

不兼容的更改:在非常旧的MySQL版本中(在4.1之前),时间戳数据类型支持显示宽度,而显示宽度从MySQL 4.1开始被忽略。这在MySQL 5.1中是不可取的,在MySQL 5.5中完全删除。当试图在MySQL 5.5或更高版本的服务器上使用时间戳(N)列时,行为上的这些变化可能导致两种问题: 导入在MySQL 5.0或更早的服务器中创建的转储文件(例如,使用mysqldump创建的转储文件)到 一个较新的发行版系列、包含时间戳(N)的CREATE或ALTER语句导致导入失败,语法错误。 若要解决此问题,请在文本编辑器中编辑转储文件,将时间戳(N)的任何实例替换为 导入文件。一定要为此使用纯文本编辑器,而不是文字处理器;否则,结果几乎肯定无法导入到MySQL服务器。

http://dev.mysql.com/doc/refman/5.1/en/timestamp-initialization.html

所以你不能

代码语言:javascript
复制
`datum_en_tijd` timestamp(3)

相反,您需要使用

代码语言:javascript
复制
`datum_en_tijd` timestamp 

代码语言:javascript
复制
`datum_en_tijd` datetime(3)
票数 3
EN

Stack Overflow用户

发布于 2014-05-05 10:22:04

是的,时间戳不再需要这一点,我通常只在DEAFAULT或UPDATE CURRENT_TIMESTAMP中使用它,您可能会发现这两者都很有用。

票数 0
EN

Stack Overflow用户

发布于 2019-03-15 07:59:29

一些可供选择的变体:

created_at时间戳(3)非空默认值'1970-01-01 12:34:56‘

mysql_row_created_at时间戳(3)非空缺省CURRENT_TIMESTAMP(3)

created_at时间戳(3)空缺省空

每一个都有自己的优缺点。

不要(永远)使用日期时间,因为它没有相关的时区,它通常只是一个(打包的)字符串。

MySQL时间戳类型物理存储在UTC中(它是增量)。它在会话的活动时区中呈现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23469985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档