在 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 是允许的最高精度。
中 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
这可能是一个非常初级的问题,但我以前从未用 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 是允许的最高精度。
中 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