D.S

dev.mysql.com

MySQL :: MySQL 5.6 リファレンスマニュアル :: 10.6.2 タイムゾーンのうるう秒のサポート

MySQL :: MySQL 5.6 リファレンスマニュアル :: 10.6.2 タイムゾーンのうるう秒のサポート Contact MySQL  |  Login  |  Register The world's most popular open source database MySQL.com Downloads Documentation Developer Zone Developer Zone Downloads MySQL.com Documentation MySQL Server MySQL Enterprise Workbench Router Utilities/Fabric MySQL NDB Cluster Connectors More MySQL.com Downloads Developer Zone Section Menu:   Documentation Home MySQL 5.6 リファレンスマニュアル 序文と法的通知 一般情報 MySQL のインストールと更新 チュートリアル MySQL プログラム MySQL サーバーの管理 セキュリティー バックアップとリカバリ 最適化 言語構造 グローバリゼーション 文字セットのサポート 一般の文字セットおよび照合順序 MySQL での文字セットと照合順序 文字セットと照合順序の指定 サーバー文字セットおよび照合順序 データベース文字セットおよび照合順序 テーブル文字セットおよび照合順序 カラム文字セットおよび照合順序 文字列リテラルの文字セットおよび照合順序 各国文字セット 文字セットと照合順序の割り当ての例 ほかの DBMS との互換性 接続文字セットおよび照合順序 アプリケーションの文字セットおよび照合順序の構成 エラーメッセージの文字セット 照合順序の問題 照合順序名 SQL ステートメントでの COLLATE の使用 COLLATE 句の優先順位 照合順序と文字セットとの適切な対応 式の照合順序 _bin および binary 照合順序 BINARY 演算子 照合順序の効果の例 照合順序と INFORMATION_SCHEMA 検索 文字列のレパートリー 文字セットのサポートによる影響を受ける演算 結果文字列 CONVERT() と CAST() SHOW ステートメントと INFORMATION_SCHEMA Unicode のサポート ucs2 文字セット (UCS-2 Unicode エンコーディング) utf16 文字セット (UTF-16 Unicode エンコーディング) utf16le 文字セット (UTF-16LE Unicode エンコーディング) utf32 文字セット (UTF-32 Unicode エンコーディング) utf8 文字セット (3 バイト UTF-8 Unicode エンコーディング) utf8mb3 文字セット (utf8 のエイリアス) utf8mb4 文字セット (4 バイトの UTF-8 Unicode エンコーディング) 以前の Unicode サポートから現在の Unicode サポートへのアップグレード メタデータ用の UTF-8 カラム文字セットの変換 MySQL でサポートされる文字セットと照合順序 Unicode 文字セット 西ヨーロッパの文字セット 中央ヨーロッパの文字セット 南ヨーロッパおよび中東の文字セット バルト語の文字セット キリル文字の文字セット アジアの文字セット エラーメッセージ言語の設定 文字セットの追加 文字定義配列 複雑な文字セットの文字列照合のサポート 複雑な文字セットのマルチバイト文字のサポート 文字セットへの照合順序の追加 照合順序の実装タイプ 照合順序 ID の選択 8 ビットの文字セットへの単純な照合順序の追加 Unicode 文字セットへの UCA 照合順序の追加 LDML 構文を使用した UCA 照合順序の定義 MySQL でサポートされる LDML 構文 Index.xml の構文解析中の診断 文字セットの構成 MySQL Server でのタイムゾーンのサポート タイムゾーンの変更による現在の時間の維持 タイムゾーンのうるう秒のサポート MySQL Server のロケールサポート データ型 関数と演算子 SQL ステートメントの構文 InnoDB ストレージエンジン 代替ストレージエンジン 高可用性と拡張性 レプリケーション MySQL Cluster NDB 7.3 および MySQL Cluster NDB 7.4 パーティション化 ストアドプログラムおよびビュー INFORMATION_SCHEMA テーブル MySQL パフォーマンススキーマ Connector および API MySQL の拡張 MySQL Enterprise Edition MySQL Workbench MySQL 5.6 のよくある質問 エラー、エラーコード、および一般的な問題 MySQL リリースノート 制約と制限 MySQL 用語集 サードパーティーコンポーネントライセンス 全般的な索引 関数の索引 コマンドの索引 関数の索引 INFORMATION_SCHEMA の索引 結合型の索引 演算子の索引 オプションの索引 権限の索引 モードの索引 ステートメント/構文の索引 ステータス変数の索引 システム変数の索引 トランザクション分離レベルのインデックス Download this Manual PDF (US Ltr) - 27.1Mb PDF (A4) - 27.1Mb EPUB - 7.5Mb HTML Download (TGZ) - 7.2Mb HTML Download (Zip) - 7.2Mb version 5.6 8.0  English 5.7  English 5.6  English 5.5  English MySQL 5.6 リファレンスマニュアル  /  ...  /  グローバリゼーション  /  MySQL Server でのタイムゾーンのサポート  /  タイムゾーンのうるう秒のサポート 10.6.2 タイムゾーンのうるう秒のサポート うるう秒値は、:59:59 で終わる時間部分を使用して返されます。これは、NOW() などの関数が、うるう秒の間、2、3 秒連続して同じ値を返すことがあることを意味します。:59:60 または :59:61 で終わる時間部分を持つリテラル時間値が無効と見なされることに変わりはありません。 うるう秒の 1 秒前の TIMESTAMP 値を検索する必要がある場合、'YYYY-MM-DD hh:mm:ss' 値での比較を使用すると異常な結果が得られることがあります。この点について次の例で説明します。ローカルタイムゾーンを UTC に変更するので、内部値 (UTC での値) と表示値 (タイムゾーン修正が適用された値) の差がなくなります。 mysql> CREATE TABLE t1 ( -> a INT, -> ts TIMESTAMP DEFAULT NOW(), -> PRIMARY KEY (ts) -> ); Query OK, 0 rows affected (0.01 sec) mysql> -- change to UTC mysql> SET time_zone = '+00:00'; Query OK, 0 rows affected (0.00 sec) mysql> -- Simulate NOW() = '2008-12-31 23:59:59' mysql> SET timestamp = 1230767999; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO t1 (a) VALUES (1); Query OK, 1 row affected (0.00 sec) mysql> -- Simulate NOW() = '2008-12-31 23:59:60' mysql> SET timestamp = 1230768000; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO t1 (a) VALUES (2); Query OK, 1 row affected (0.00 sec) mysql> -- values differ internally but display the same mysql> SELECT a, ts, UNIX_TIMESTAMP(ts) FROM t1; +------+---------------------+--------------------+ | a | ts | UNIX_TIMESTAMP(ts) | +------+---------------------+--------------------+ | 1 | 2008-12-31 23:59:59 | 1230767999 | | 2 | 2008-12-31 23:59:59 | 1230768000 | +------+---------------------+--------------------+ 2 rows in set (0.00 sec) mysql> -- only the non-leap value matches mysql> SELECT * FROM t1 WHERE ts = '2008-12-31 23:59:59'; +------+---------------------+ | a | ts | +------+---------------------+ | 1 | 2008-12-31 23:59:59 | +------+---------------------+ 1 row in set (0.00 sec) mysql> -- the leap value with seconds=60 is invalid mysql> SELECT * FROM t1 WHERE ts = '2008-12-31 23:59:60'; Empty set, 2 warnings (0.00 sec) これを回避するには、うるう秒の修正が適用されている、実際にカラムに格納されている UTC 値に基づいた比較を使用します。 mysql> -- selecting using UNIX_TIMESTAMP value return leap value mysql> SELECT * FROM t1 WHERE UNIX_TIMESTAMP(ts) = 1230768000; +------+---------------------+ | a | ts | +------+---------------------+ | 2 | 2008-12-31 23:59:59 | +------+---------------------+ 1 row in set (0.00 sec) PREV   HOME   UP   NEXT Download this Manual PDF (US Ltr) - 27.1Mb PDF (A4) - 27.1Mb EPUB - 7.5Mb HTML Download (TGZ) - 7.2Mb HTML Download (Zip) - 7.2Mb User Comments   Posted by Ben Clewett on June 29, 2015 This seems not to be the case on 5.6.24: CREATE TABLE t1 (a INT, ts TIMESTAMP DEFAULT NOW