10bet网址
MySQL 5.6リファレンスマニュアル
下载本手册
PDF(美国高级主任)- 26.8 mb
PDF (A4)- 26.8 mb


10.6.2タムゾンのうるう秒のサポト

うるう秒値は,: 59:59で終わる時間部分を使用して返されます。これは,现在()などの関数が,うるう秒の間,2,3秒連続して同じ値を返すことがあることを意味します。: 59:60または: 59:61で終わる時間部分を持リテラル時間値が無効と見なされることに変わりはありません。

うるう秒の1秒前の时间戳値を検索する必要がある場合,“YYYY-MM-DD hh: mm: ss”値での比較を使用すると異常な結果が得られることがあります。この点にいて次の例で説明します。ローカルタイムゾーンをUTCに変更するので,内部値(UTCでの値)と表示値(タイムゾーン修正が適用された値)の差がなくなります。

mysql> CREATE TABLE t1 (-> a INT, -> ts TIMESTAMP DEFAULT NOW(), -> PRIMARY KEY (ts) ->);mysql> SET time_zone = '+00:00';查询OK, 0行影响(0.00秒)mysql>——模拟现在()= '2008-12-31 23:59:59' mysql> SET时间戳= 1230767999;mysql> INSERT INTO t1 (a) VALUES (1);查询OK, 1 row affected (0.00 sec) mysql>——Simulate NOW() = '2008-12-31 23:59:60' mysql> SET timestamp = 1230768000;mysql> INSERT INTO t1 (a) VALUES (2);SELECT a, ts, UNIX_TIMESTAMP(ts) FROM t1; SELECT a, ts, UNIX_TIMESTAMP(ts) FROM t1;+------+---------------------+--------------------+ | 一个| ts | UNIX_TIMESTAMP (ts ) | +------+---------------------+--------------------+ | 1 | 2008-12-31 23:59:59 | 1230767999 | | 2 | 2008-12-31 23:59:59 | 1230768000  | +------+---------------------+--------------------+ 2行(0.00秒)mysql >——只有non-leap值匹配mysql > SELECT * FROM t1, ts = 2008-12-31 23:59:59的;+------+---------------------+ | 一个| ts  | +------+---------------------+ | 1 | 2008-12-31 23:59:59  | +------+---------------------+ 1行组(0.00秒)mysql >——跳跃值60秒=无效mysql > SELECT * FROM t1, ts = ' 2008-12-31 23:59:60 ';空集,2个警告(0.00秒)

これを回避するには,うるう秒の修正が適用されている,実際にカラムに格納されているUTC値に基づいた比較を使用します。

mysql> SELECT * FROM t1 WHERE UNIX_TIMESTAMP(ts) = 1230768000;+------+---------------------+ | 一个| ts  | +------+---------------------+ | 2 | 2008-12-31 23:59:59  | +------+---------------------+ 1行集(0.00秒)