web-dev-qa-db-ja.com

MySQLの「microtime」列のデフォルト値

私の興味は、FSPが6の時間を保存することです。私が読んだように、これはTIMESTAMPまたはDATETIMEデータ型では達成できません。そのため、double関数の出力を格納するmicrotimeフィールドがあります。

とにかく、そのようなフィールドのデフォルト値を設定する(または作成するためのコードを記述する)ことができますか?

NOW(6)のようなものを使用して、たとえば1442059062.065123を取得します。

5
Victor

以下のように_UNIX_TIMESTAMP_でフォーマットできます:

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

mysql> 
_

他の日付と時刻の関数ここを見つけることができます。 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> 
_
6
oNare

たぶん、あなたはDOUBLEを望んでいますか?またはDECIMAL(16,6)

SELECT UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP(NOW(6));
+-----------------------+------------------------+
| UNIX_TIMESTAMP(NOW()) | UNIX_TIMESTAMP(NOW(6)) |
+-----------------------+------------------------+
|            1442099776 |      1442099776.196746 |
+-----------------------+------------------------+

または1000000を掛けてBIGINT

SELECT 1000000 * UNIX_TIMESTAMP(NOW(6));
+----------------------------------+
| 1000000 * UNIX_TIMESTAMP(NOW(6)) |
+----------------------------------+
|          1442099987061904.000000 |
+----------------------------------+

(BIGINTに格納すると、小数点以下が消えます。)

4
Rick James