在MySql工作台中将列设置为时间戳?

时间:2015-06-02 23:26:51

标签: mysql sql timestamp mysql-workbench

这可能是一个非常基本的问题,但我之前从未创建过TIMESTAMP()的表,而且我对作为参数的内容感到困惑。例如,这里:

enter image description here

我只是随意添加TIMESTAMP(20),但20作为参数在这里表示什么?这里应该放什么?

我用Google搜索了这个问题,但并没有真正想出任何东西......无论如何我是sql的新手,所以任何帮助都会非常感激,谢谢!

5 个答案:

答案 0 :(得分:8)

修改

从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

但请注意,表中定义的第一个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
) 

数据类型之后的parens取决于数据类型是什么,但对于某些数据类型,它是一个长度修饰符。

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

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

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

编辑

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

答案 1 :(得分:7)

这是我的朋友的精确度,如果你举例如(2)作为参数,你会得到一个精确的日期,如:2015-12-29 00:00:00。 00 顺便说一句,最大值是6。

答案 2 :(得分:2)

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

中完全删除

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

在MySQL Workbench 8.0中

TIMESTAMP

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

TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

比你有:

2020-01-08 19:10:05

但是,如果您希望使用记录更新来修改TIMESTAMP,而不是使用:

TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP