这可能是一个非常基本的问题,但我之前从未创建过TIMESTAMP()
的表,而且我对作为参数的内容感到困惑。例如,这里:
我只是随意添加TIMESTAMP(20)
,但20
作为参数在这里表示什么?这里应该放什么?
我用Google搜索了这个问题,但并没有真正想出任何东西......无论如何我是sql的新手,所以任何帮助都会非常感激,谢谢!
答案 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是允许精度的最高值。
答案 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