MySQL当前时间戳错误解析DDL达微秒
这是我想要的MySQL表,但重点是MySQL当前时间戳错误解析DDL达微秒,mysql,timestamp,workbench,Mysql,Timestamp,Workbench,这是我想要的MySQL表,但重点是datum\u en\u 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) DEFA
datum\u en\u 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;
如您所见,时间戳
与(3)
的时间间隔为毫秒每当我试图改变桌子时。。。在MySQL Workbench中,我遇到以下错误:
当我查看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行MySQL WorkBench上的语法错误为我们提供了:
我正在运行MySQL 5.6.16
不兼容的更改:在非常旧的MySQL版本(4.1之前)中
时间戳数据类型支持显示宽度,该宽度为静默显示
从MySQL 4.1开始被忽略。这在MySQL 5.1中已被弃用,并且
在MySQL 5.5中完全删除。这些行为上的改变会导致
尝试将时间戳(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
较新的发行版系列、CREATETABLE或ALTERTABLE语句
包含时间戳(N)会导致导入失败,并出现语法错误
To fix this problem, edit the dump file in a text editor to replace any instances of TIMESTAMP(N) with TIMESTAMP prior to
导入文件。请确保为此使用纯文本编辑器,并且
不是文字处理器;否则,结果几乎可以肯定
无法导入到MySQL服务器
所以你不可能
`datum_en_tijd` timestamp(3)
相反,你需要使用
`datum_en_tijd` timestamp
或
是的,时间戳不再需要此功能,我通常只将其与DEAFULT或更新当前时间戳一起使用,您可能会发现两者都很有用。一些变体可供选择:
创建时间戳(3)非空默认值“1970-01-01 12:34:56”
mysql\u行\u在
timestamp(3)处创建\u非空默认当前\u时间戳(3)
创建时间戳(3)空默认空
每种方法都有其优缺点
不要(永远)使用datetime,因为它没有相关的时区,它基本上就像一个(压缩的)字符串
MySQL时间戳类型物理上存储在UTC中(它是一个UNIX epoch增量)。它在会话的活动时区中呈现。但它说,从5.6开始,我可以使用时间戳(n)
,请参阅:阅读我看到的最后一段,因此从5.5开始,我不能使用时间戳(n)
。那么,我必须使用TIME(n)
或DATETIME(n)
来表示分数?这是正确的,注意ON UPDATE
只能与TIMESTAMP
一起使用,而不能与TIME
或DATETIME
一起使用你能编辑你的答案吗,既然这就是我的答案?因为我不希望在初始查询中使用DEFAULT
或ON UPDATE
子句。
`datum_en_tijd` datetime(3)