時間値を表すための日時データ型は、DATE
, TIME
, DATETIME
, TIMESTAMP
および YEAR
です。 それぞれの時間型には、一定範囲の有効な値のほかに、MySQL では表すことのできない無効な値の指定時に使用できる「ゼロ」値があります。 TIMESTAMP
および DATETIME
タイプには、セクション11.2.5「TIMESTAMP および DATETIME の自動初期化および更新機能」 で説明されている特別な自動更新動作があります。
時間データ型の記憶域要件の詳細は、セクション11.7「データ型のストレージ要件」 を参照してください。
時間値を演算する関数の説明については、セクション12.7「日付および時間関数」を参照してください。
日付と時間型を処理するときに、次の考慮事項に留意してください。
MySQL は、標準出力形式で所定の日付または時間型の値を取得しますが、(たとえば、日付または時間型に割り当てたり、比較したりする値を指定するときに) 入力した入力値に対してさまざまな形式を解釈しようとします。 日付と時間型に許可されている形式の説明については、セクション9.1.3「日付リテラルと時間リテラル」を参照してください。 有効な値を入力する必要があります。 ほかの形式で値を使用すると、予期しない結果が生じることがあります。
MySQL は、複数の形式で値を解釈しようとしますが、日付の部分は、ほかでは一般的に使用される月-日-年や日-月-年の順 (
'09-04-98'
や'04-09-98'
など) ではなく、年-月-日の順 ('98-09-04'
など) で常に指定する必要があります。 他の順序の文字列を年 - 月 - 日の順序に変換するには、STR_TO_DATE()
関数が役立つ場合があります。-
世紀が不明であるため、2 桁の年の値を含む日付はあいまいです。 MySQL は、次のルールを使用して 2 桁の年の値を解釈します:
70-99
の範囲内の年の値は1970-1999
になります。00-69
の範囲内の年の値は2000-2069
になります。
セクション11.2.8「日付の 2 桁の年」も参照してください。
ある時間型から別の時間型への値の変換は、セクション11.2.7「日付と時間型間での変換」でのルールに従って行われます。
値が数値コンテキストで使用されている場合、MySQL は日付または時間の値を数値に自動的に変換します。逆の場合も同様です。
デフォルトで MySQL は、日付または時間型の値で、範囲外であるか、それ以外で型にとって無効である値を見つけた場合、値をその型の「ゼロ」値に変換します。 その例外では、範囲外の
TIME
値はTIME
範囲の適切な終点に切り落とされます。SQL モードを適切な値に設定することで、MySQL がサポートする日付の種類をより正確に指定できます。 (セクション5.1.11「サーバー SQL モード」を参照してください。)
ALLOW_INVALID_DATES
SQL モードを有効にすることによって、'2009-11-31'
などの特定の日付を MySQL に受け入れさせることができます。 これは、ユーザーが今後の処理のために、(たとえば Web フォームで) 指定した「間違っている可能性のある」値をデータベースに格納するときに役立ちます。 このモードでは、MySQL は、月が 1 から 12 までの範囲にあることと、日付が 1 から 31 までの範囲にあることのみ検証します。MySQL では、
DATE
またはDATETIME
カラムに、日がゼロ、または月および日がゼロである日付の格納を許可しています。 これは、正確な日付がわかっていない可能性のある生年月日を格納する必要があるアプリケーションで役立ちます。 この場合は、単に日付を'2009-00-00'
または'2009-01-00'
として格納します。 ただし、これらのような日付を使用すると、完全な日付を必要とするDATE_SUB()
やDATE_ADD()
などの関数の正しい結果が得られないようにする必要があります。 日付にゼロの月または日の部分を許可しないようにするには、NO_ZERO_IN_DATE
モードを有効にします。MySQL では、「ダミーの日付」として
'0000-00-00'
の「ゼロ」の値を格納できます。 場合によっては、これはNULL
値を使用するよりも便利であり、使用するデータおよびインデックス領域が少なくなることがあります。'0000-00-00'
を禁止するには、NO_ZERO_DATE
モードを有効にします。Connector/ODBC で使用される「ゼロ」の日付または時間の値は、ODBC がこのような値を処理できないため、
NULL
に自動的に変換されます。
次の表に、それぞれの型の「ゼロ」値の形式を示します。 「ゼロ」値は特別ですが、表に示されている値を使用して、格納したり、明示的に参照したりできます。 また、より簡単に記述できる '0'
や 0
の値を使用してこれを行うこともできます。 日付部分 (DATE
、DATETIME
および TIMESTAMP
) を含む時間型の場合、これらの値を使用すると警告またはエラーが発生する可能性があります。 正確な動作は、厳密および NO_ZERO_DATE
SQL モードが有効になっているかどうかによって異なります。セクション5.1.11「サーバー SQL モード」 を参照してください。
データ型 | 「ゼロ」値 |
---|---|
DATE |
'0000-00-00' |
TIME |
'00:00:00' |
DATETIME |
'0000-00-00 00:00:00' |
TIMESTAMP |
'0000-00-00 00:00:00' |
YEAR |
0000 |