MySQL - TIMESTAMP的默认值(3)

时间:2014-05-15 06:55:47

标签: mysql

我的数据库是MySql 5.6。

我想使用CURRENT_TIMESTAMP作为默认值,该属性是TIMESTAMP(3)的类型。

但我收到错误:

  

错误1067(42000):“已更新”

的默认值无效

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

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

1 个答案:

答案 0 :(得分:19)

根据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)

请参阅
Initialization and Updating for TIMESTAMP and DATETIME