MySQL 中“microtime”列的默认值

Vic*_*tor 5 mysql timestamp default-value datetime

我的兴趣是用 FSP 为 6 来存储时间。正如我所读到的,这不能用TIMESTAMPorDATETIME数据类型来实现。所以,我有一个double字段来存储microtime函数的输出。

无论如何我可以为这样的字段设置(甚至编写一些代码来创建)默认值吗?

我想使用类似的东西NOW(6)并获取1442059062.065123例如。

oNa*_*are 6

您可以使用UNIX_TIMESTAMP以下格式对其进行格式化:

mysql> SELECT UNIX_TIMESTAMP(NOW(6));
+------------------------+
| UNIX_TIMESTAMP(NOW(6)) |
+------------------------+
|      1442068528.543100 |
+------------------------+
1 row in set (0,00 sec)

mysql> 
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到任何其他日期和时间函数。你可以添加一个trigger,如果你想为你的默认值decimal(16, 6) microtime中,使用BEFORE INSERT并更换NEW.bigintvalue=UNIX_TIMESTAMP(NOW(6));

例子:

mysql> CREATE TABLE `test`.`test1` (
    ->   `id` INT NOT NULL AUTO_INCREMENT,
    ->   `time` DECIMAL(16, 6) NULL,
    ->   PRIMARY KEY (`id`));
Query OK, 0 rows affected (0.01 sec)

mysql> 
mysql> DELIMITER //
mysql> CREATE DEFINER=`root`@`localhost` TRIGGER `test`.`test1_BEFORE_INSERT` BEFORE INSERT ON `test1` FOR EACH ROW
    -> BEGIN
    -> SET NEW.time=UNIX_TIMESTAMP(NOW(6));
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> 
mysql> # Adding 1 into id field
mysql> INSERT INTO `test`.`test1` (`id`) VALUES ('1');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test.test1;
+----+-------------------+
| id | time              |
+----+-------------------+
|  1 | 1442069359.675330 |
+----+-------------------+
1 row in set (0.00 sec)

mysql> 
Run Code Online (Sandbox Code Playgroud)