在 MySql workbench 中将列设置为时间戳?

Setting a column as timestamp in MySql workbench?

这可能是一个非常初级的问题,但我以前从未用 TIMESTAMP() 创建过 table,我对将什么作为参数感到困惑。例如,这里:

我随便放了TIMESTAMP(20),但是这里的参数20是什么意思呢?这里应该放什么?

我用谷歌搜索了这个问题,但并没有真正想出任何东西,所以...无论如何我是 sql 的新手,所以任何帮助将不胜感激,谢谢!

此语法似乎来自 4.1 之前的旧版本 MySQL。它已从 5.5 https://dev.mysql.com/doc/refman/5.0/en/upgrading-from-previous-series.html

中完全删除

所以在这里指定宽度没有意义,因为它可能会被忽略。你是什​​么版本 运行?

编辑

从 MySQL 5.6.4 开始,数据类型 TIMESTAMP(n) 指定 n(0 到 6)小数秒的精度。

在 MySQL 5.6 之前,MySQL 不支持作为 TIMESTAMP 数据类型的一部分存储的小数秒。

参考:https://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html


我们不需要在 TIMESTAMP 上指定长度修饰符。我们可以自己指定TIMESTAMP

但请注意,table 中定义的第一个 TIMESTAMP 列会自动初始化和更新。例如:

create table foo (id int, ts timestamp, val varchar(2));

show create table foo; 

CREATE TABLE `foo` (
`id` INT(11) DEFAULT NULL,
`ts` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`val` VARCHAR(2) DEFAULT NULL
) 

数据类型后面的括号中的内容取决于数据类型,但对于某些数据类型,它是长度修饰符。

对于某些数据类型,长度修饰符会影响可存储值的最大长度。例如,VARCHAR(20) 最多允许存储 20 个字符。而DECIMAL(10,6)允许小数点前四位后六位的数值,有效范围为-9999.999999至9999.999999。

对于其他类型,长度修饰符不影响可存储值的范围。例如,INT(4)INT(10) 都是整数,并且都可以存储整数数据类型允许的完整值范围。

在这种情况下,长度修饰符的作用仅供参考。它实质上指定了推荐的显示宽度。客户端可以利用它来确定在一行上保留多少 space 来显示列中的值。客户不必这样做,但该信息可用。

编辑

TIMESTAMP 数据类型不再接受长度修饰符。 (如果您 运行 是 MySQL 的真正旧版本并且它被接受,它将被忽略。)

这就是精度我的朋友,如果你将例如 (2) 作为参数,你将得到一个精度如下的日期:2015-12-29 00:00:00.00 ,顺便说一下最大值是6.

MySQL 5.7 似乎支持这种语法。传递的参数是精度。 TIMESTAMP(3) 将允许毫秒精度。 6 是允许的最高精度。

参考:http://dev.mysql.com/doc/refman/5.7/en/datetime.html

中 MySQL workbench 8.0

TIMESTAMP

不起作用,您需要添加 wole 语句(如果您以后不想更新时间戳)

TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

比你有例如:

2020-01-0819:10:05

但如果您希望 TIMESTAMP 可以通过记录更新进行修改,而不是使用:

TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP