次のような文字列があります。
2011-11-11 11:11:11.111111
それをMySqlのdatetime列に挿入する必要があります。でも挿入したらこうなる
2011-11-11 11:11:11
何がうまくいかないのですか?
次のような文字列があります。
2011-11-11 11:11:11.111111
それをMySqlのdatetime列に挿入する必要があります。でも挿入したらこうなる
2011-11-11 11:11:11
何がうまくいかないのですか?
MySql 5.6+ は時間値の小数秒をサポートしていますが、以前のバージョンはサポートしていません。
標準のdatetime
列はマイクロ秒の値を保持しませんが、保持しますdatetime(6)
。MySql 5.6 でテストできます。
CREATE TABLE your_table (
d1 datetime,
d2 datetime(6)
);
INSERT INTO your_table VALUES
('2011-11-11 11:11:11.111111', '2011-11-11 11:11:11.111111');
SELECT MICROSECOND(d1) as m1, MICROSECOND(d2) as m2
FROM your_table;
m1 | m2
-----------
0 | 111111
MySql 5.6+ を使用していない場合は、日時部分用とマイクロ秒用の 2 つの列を使用することをお勧めします。
CREATE TABLE your_table (
dt datetime,
us int
);
INSERT INTO your_table VALUES
('2011-11-11 11:11:11.111111', MICROSECOND('2011-11-11 11:11:11.111111'));
時間値の小数秒で文書化されているように:
末尾の小数秒の部分は、リテラル値などのコンテキストでの時間値、および一部の時間関数への引数または一部の時間関数からの戻り値で許可されます。例:
mysql> SELECT MICROSECOND( '2010-12-10 14:12:09.019473'); + ------------------------------------------- + | MICROSECOND( '2010-12-10 14:12:09.019473')| + ------------------------------------------- + | 19473 | + ------------------------------------------- +ただし、MySQLが値を任意の時間データ型の列に格納する場合、小数部分は破棄され、格納されません。
この動作はv5.6.4で変更されていることに注意してください。