我的数据库是 MySql 5.6。
我想在一个类型为 TIMESTAMP(3) 的属性上使用 CURRENT_TIMESTAMP 作为默认值。
但是我得到了错误:
ERROR 1067 (42000): Invalid default value for 'updated'
我认为这是因为 CURRENT_TIMESTAMP 只有精度到秒。
我如何将当前时间设置为带小数部分的 timestamp 默认值?
我的数据库是 MySql 5.6。
我想在一个类型为 TIMESTAMP(3) 的属性上使用 CURRENT_TIMESTAMP 作为默认值。
但是我得到了错误:
ERROR 1067 (42000): Invalid default value for 'updated'
我认为这是因为 CURRENT_TIMESTAMP 只有精度到秒。
我如何将当前时间设置为带小数部分的 timestamp 默认值?
根据关于timestamp
和datetime
类型列的文档:
如果
TIMESTAMP
或DATETIME
列定义中包含任何明确的小数秒精度值,则必须在整个列定义中使用相同的值。这是允许的:
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)