MySQL - TIMESTAMP(3)的默认值

20

我的数据库是 MySql 5.6。

我想在一个类型为 TIMESTAMP(3) 的属性上使用 CURRENT_TIMESTAMP 作为默认值。

但是我得到了错误:

ERROR 1067 (42000): Invalid default value for 'updated'

我认为这是因为 CURRENT_TIMESTAMP 只有精度到秒。

我如何将当前时间设置为带小数部分的 timestamp 默认值?


首先尝试在TIMESTAMP(3)中不包括3。同时确保表中仅有一个使用CURRENT_TIMESTAMP的字段。 - Ozair Kafray
1个回答

34

根据关于timestampdatetime类型列的文档:

如果TIMESTAMPDATETIME列定义中包含任何明确的小数秒精度值,则必须在整个列定义中使用相同的值。

这是允许的:

CREATE TABLE t1 (
  ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
);

其他示例:

mysql> create table tbl_so_q23671222_1( ts timestamp(3) default now() );
ERROR 1067 (42000): Invalid default value for 'ts'

mysql> create table tbl_so_q23671222_1( ts timestamp(3) default now(3) );
Query OK, 0 rows affected (0.59 sec)

mysql> create table tbl_so_q23671222_2( ts timestamp(3) default current_timestamp );
ERROR 1067 (42000): Invalid default value for 'ts'

mysql> create table tbl_so_q23671222_2( ts timestamp(3) default current_timestamp(3) );
Query OK, 0 rows affected (0.38 sec)

mysql> desc tbl_so_q23671222_1;
+-------+--------------+------+-----+----------------------+-------+
| Field | Type         | Null | Key | Default              | Extra |
+-------+--------------+------+-----+----------------------+-------+
| ts    | timestamp(3) | NO   |     | CURRENT_TIMESTAMP(3) |       |
+-------+--------------+------+-----+----------------------+-------+
1 row in set (0.01 sec)

mysql> desc tbl_so_q23671222_2;
+-------+--------------+------+-----+----------------------+-------+
| Field | Type         | Null | Key | Default              | Extra |
+-------+--------------+------+-----+----------------------+-------+
| ts    | timestamp(3) | NO   |     | CURRENT_TIMESTAMP(3) |       |
+-------+--------------+------+-----+----------------------+-------+
1 row in set (0.01 sec)

参考:
TIMESTAMP和DATETIME的初始化和更新


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接