無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 10 データタイプ :: 10.3 日付と時刻タイプ
« 10.2 数値タイプ

10.3.1 DATETIME、DATE、そして TIMESTAMP タイプ »
Section Navigation      [Toggle]
  • 10 データタイプ
  • 10.1 データタイプ概要
  • 10.2 数値タイプ
  • 10.3 日付と時刻タイプ
    • 10.3.1 DATETIME、DATE、そして TIMESTAMP タイプ
    • 10.3.2 TIME タイプ
    • 10.3.3 YEAR タイプ
    • 10.3.4 2000年問題とデータタイプ
  • 10.4 文字列タイプ
  • 10.5 データタイプが必要とする記憶容量
  • 10.6 カラムに適したタイプの選択
  • 10.7 その他のデータベースエンジンのデータタイプの利用

10.3. 日付と時刻タイプ

[+/-]

10.3.1. DATETIME、DATE、そして TIMESTAMP タイプ
10.3.2. TIME タイプ
10.3.3. YEAR タイプ
10.3.4. 2000年問題とデータタイプ

時間的な値を表す日付と時刻タイプは、DATETIME、DATE、TIMESTAMP、 TIME、そして YEAR です。MySQLが表す事のできない不正データを指示した時に利用される「ゼロ」値と同様に、各時刻タイプは有効値範囲を持ちます。TIMESTAMP タイプには、後に紹介されますが、特別な更新機能があります。時刻タイプが必要とする記憶容量に関しては、項10.5. 「データタイプが必要とする記憶容量」 を参照してください。

MySQLは不正データを挿入すると警告かエラーを発生させます。SQLモードを適切な値に設定する事で、MySQLがサポートする日付のタイプを指定する事ができます。(詳しくは 項4.2.6. 「SQL モード」 をご確認ください。)ALLOW_INVALID_DATES SQLモードを利用する事によって、'1999-11-31' のような確実な日付をMySQLに指定する事ができます。これは、ユーザーが将来の処理の為にデータベースの中で指定した「間違っているかもしれない」値を格納したい時に便利です。このモードの時MySQLは、月は0から12の範囲、日付は0から31の範囲でしか確認しません。MySQLが DATE か DATETIME カラムの中で日付、または月と日付がゼロであるデータの格納を許可するので、これらの範囲はゼロを含むと定義されています。これは、誕生日など、正確な日付が不明なデータを格納する必要があるアプリケーションに大変便利です。その場合は、'1999-00-00' や '1999-01-00' 等のようにデータを格納するだけでよいのです。このようなデータを格納する時は、DATE_SUB() や DATE_ADD など、正確な日付を必要とする物のように、正確な結果を期待する事はできません。(もし日付にゼロを利用したくないのであれば、NO_ZERO_IN_DATE SQLモードを利用する事ができます。)

MySQLではまた、'0000-00-00' を 「ダミーの日付」 (もしNO_ZERO_DATE SQLモードを利用していないのであれば)として格納する事ができます。これは、NULL 値を利用するよりも便利な事が多いです。(データとインデックスの容量も少量で済みます。)

日付と時刻タイプを利用する際の注意事項があります。

  • MySQLは標準アウトプットフォーマットの中で入力された日付や時刻の値を検索しますが、提供された値に対して、いくつものフォーマットを読み取ろうとします。(例えば、日付や時刻タイプに指定される、または比較される値を指定した時。)次のセクションで紹介されているフォーマットだけがサポートされています。正当な値を提供しなければいけません。もし他のフォーマットの値を使用すると、予期しない結果が出る可能性があります。

  • 2桁の年を含む日付の値は、世紀が不明な為あいまいです。MySQLは2桁の年の値を次のルールに従って解釈します。

    • 70-99 の範囲の年の値は 1970-1999 に変換されます。

    • 00-69 の範囲の年の値は 2000-2069 に変換されます。

  • MySQLが値をいくつかのフォーマットで読み取るとしても、日付は一般的に頻繁に使われる、月-日-年や、日-月-年の順番ではなく、(例えば '09-04-98'、 '04-09-98')、年-月-日の順番(例えば '98-09-04')で入力する必要があります。

  • MySQLは、その値が数字で利用されれば、日付と時刻タイプの値を数字に変換し、またその反対も行います。

  • デフォルトでは、MySQLに日付や時刻タイプの範囲外の値や、そのタイプには不正なデータ(このセクションの始めで触れたように)が入力された時は、その値を 「ゼロ」 に変換します。その例外は、範囲外の TIME 値は TIME 範囲の適切な終点にクリップされるという事です。

    次のテーブルに、それぞれのタイプの 「ゼロ」 値のフォーマットが表されています。NO_ZERO_DATE SQLモードが有効な場合は、これらの値を利用すると警告メッセージが表示される事を覚えておいて下さい。

    データタイプ 「ゼロ」 値
    DATETIME '0000-00-00 00:00:00'
    DATE '0000-00-00'
    TIMESTAMP '0000-00-00 00:00:00'
    TIME '00:00:00'
    YEAR 0000
  • 「ゼロ」 値は特別ですが、テーブルに表されている値を利用して格納したり、正確に参照したりする事ができます。'0' や 0 の値を利用して行う事も可能です。こちらの方が書き込むよりも簡単です。

  • MyODBCで利用される 「ゼロ」 の日付や時刻値はODBCでは扱う事ができないので、MyODBC 2.50.12以前のバージョンでは自動的に NULL に変換されます。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.