编辑
从 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
)
数据类型后面的括号中的内容取决于数据类型是什么,但对于某些数据类型,它是一个长度修饰符。
对于某些数据类型,长度修饰符会影响可以存储的值的最大长度。例如,VARCHAR(20) 最多允许存储 20 个字符。而DECIMAL(10,6) 允许小数点前四位和小数点后六位的数值,有效范围为 -9999.999999 到 9999.999999。
对于其他类型,长度修饰符不影响可以存储的值的范围。例如,INT(4) 和 INT(10) 都是整数,并且都可以存储整数数据类型所允许的所有值。
在这种情况下,长度修饰符的作用只是提供信息。它实质上指定了推荐的显示宽度。客户端可以利用它来确定在一行上保留多少空间来显示列中的值。客户不必这样做,但该信息是可用的。
编辑
TIMESTAMP 数据类型不再接受长度修饰符。 (如果您运行的是非常旧的 MySQL 版本并且它被接受,它将被忽略。)