データ型
          DATETIME、DATE、TIMESTAMP
          はそれぞれ関連しています。
          このセクションでは、これらのデータ型の特徴を示すとともに、これらのデータ型の類似点と相違点について説明します。
        
          DATETIME
          型は、日付と時刻の両方の情報を含む値を必要とするときに使用します。MySQL
          では、DATETIME
          型の値の取り出しと表示は 'YYYY-MM-DD
          HH:MM:SS'
          形式で行われます。サポートしている範囲は
          '1000-01-01 00:00:00' 〜
          '9999-12-31 23:59:59'
          です(``サポート''
          範囲より前の値でも動作する場合がありますが、確実に動作するという保証はありません)。
        
          DATE
          型は、日付値のみ必要とし、時刻部分は必要でない場合に使用されます。MySQL
          では、DATE
          型の値の取り出しと表示は
          'YYYY-MM-DD'
          形式で行われます。サポートしている範囲は、'1000-01-01'
          〜 '9999-12-31' です。
        
          TIMESTAMP
          カラム型の特性と動作は、MySQL
          のバージョンとサーバでの SQL
          実行モードに応じて異なります。
        
          MAXDB
          モードでの実行時の TIMESTAMP
          の動作
        
          MySQL を MAXDB
          モードで実行している場合、TIMESTAMP
          は DATETIME
          と同じように動作します。TIMESTAMP
          カラムの自動更新(次の段落で説明)は行われません。MySQL
          の MAXDB
          モードでの実行は、バージョン 4.1.1
          以降で可能です。See
          項4.1.1. 「mysqld コマンドラインオプション」。
        
          MAXDB
          モードで実行していないときの
          TIMESTAMP の動作 
        
          TIMESTAMP
          カラム型では、INSERT または
          UPDATE
          操作に対して現在の日付と時刻を自動的に指定することができます。TIMESTAMP
          カラムが複数ある場合は、最初のカラムのみが自動で更新されます。
        
          最初の TIMESTAMP
          カラムの自動更新は、次のいずれかの条件で発生します。
        
              INSERT または LOAD DATA
              INFILE
              ステートメントで、カラムが明示的に指定されていない場合。
            
              UPDATE
              ステートメントおよびその他の何らかのカラム変更値でカラムが明示的に指定されていない場合(注意:
              カラムにすでに設定されている値を設定しようとする
              UPDATE
              では、TIMESTAMP
              カラムは更新されない。カラムに現在の値を設定しようとしても、MySQL
              では、効率性を考慮して更新操作が無視される)。
            
              TIMESTAMP カラムに値
              NULL
              が明示的に設定された場合。
            
          2 番目以降の TIMESTAMP
          カラムにも、現在の日付と時刻を設定することができます。カラムに
          NULL または NOW()
          を設定します。
        
          TIMESTAMP
          型のいずれかのカラムに現在の日付と時刻以外の値を設定するには、そのカラムに対して、必要な値を明示的に設定します。これは、最初の
          TIMESTAMP
          カラムについても同様です。この特性は、次に示すように、レコードの作成時に
          TIMESTAMP
          カラムに現在の日時を設定し、その後そのレコードの更新時には設定済の値を変更しないようにする場合などに役立ちます。
        
レコードの作成時に、MySQL によってカラムを設定する。 それにより、そのカラムが現在の日付と時刻に初期化される。
              そのレコードの他のカラムに対して後続の更新を行ったときには、TIMESTAMP
              カラムにそのカラムの現在の値を明示的に設定する。
            
          とはいえ、DATETIME
          カラムを使用してレコードの作成時に値を
          NOW()
          に初期化し、後続の更新時にはそのままにしておくというのも、手軽な方法です。
        
          MAXDB
          モードでの実行時の TIMESTAMP
          の特性
        
          MySQL を MAXDB
          モードで実行している場合、TIMESTAMP
          は DATETIME
          とまったく変わりません。格納と表示には同じ形式が使用され、また値の範囲も同じです。MySQL
          の MAXDB
          モードでの実行は、バージョン 4.1.1
          以降で可能です。 See
          項4.1.1. 「mysqld コマンドラインオプション」。
        
          MAXDB
          モードで実行していないときの、MySQL 4.1
          以降での TIMESTAMP の特性
        
          MySQL 4.1.0 では、TIMESTAMP
          カラムの格納および表示には、
          DATETIME
          カラムと同じ形式が使用されます。したがって、次の段落で説明している方法で狭くしたり、広げたりすることはできません。つまり、TIMESTAMP(2)
          や TIMESTAMP(4)
          などは使用できないことになります。それ以外の特性は、以前の
          MySQL バージョンと同じです。
        
          MySQL 4.1
          より前のバージョンにおける
          TIMESTAMP の特性
        
          TIMESTAMP 値は 1970 年の始まりから
          2037
          年の一定の時点までを範囲とし、時間分解能は
          1 秒です。値は数値として表示されます。
        
          MySQL で TIMESTAMP
          型の値の取り出しと表示に使用される形式は、次の表に示すように、表示サイズによって異なります。最長の
          TIMESTAMP 形式は 14
          桁ですが、TIMESTAMP
          型のカラムはもっと短い表示サイズで作成することもできます。
        
| カラム型 | 表示形式 | 
| TIMESTAMP(14) | YYYYMMDDHHMMSS | 
| TIMESTAMP(12) | YYMMDDHHMMSS | 
| TIMESTAMP(10) | YYMMDDHHMM | 
| TIMESTAMP(8) | YYYYMMDD | 
| TIMESTAMP(6) | YYMMDD | 
| TIMESTAMP(4) | YYMM | 
| TIMESTAMP(2) | YY | 
          TIMESTAMP
          型のカラムでは、表示サイズにかかわらず、格納サイズはすべて同じです。最も一般的な表示サイズは
          6、8、12、14
          です。テーブルの作成時に任意の表示サイズを指定できますが、値
          0 と 14 を超える値は強制的に 14
          に設定されます。1 〜 13
          の奇数値のサイズは強制的にすぐ上の偶数に設定されます。
        
          注意: バージョン 4.1
          以降、TIMESTAMP は 'YYYY-MM-DD
          HH:MM:SS'
          形式の文字列として返されます。その他のタイムスタンプ長のサポートは中止されました。
        
          DATETIME、DATE、TIMESTAMP
          型の値は、以下の一連の共通形式のいずれかを使用して指定することができます。
        
              'YYYY-MM-DD HH:MM:SS' または
              'YY-MM-DD HH:MM:SS'
              形式の文字列として指定。``柔軟''
              な構文が許容される ---
              日付部分と時刻部分の区切り記号として、任意の句読文字を使用することができる。
              たとえば、'98-12-31
              11:30:45'、'98.12.31
              11+30+45'、'98/12/31
              11*30*45'、'98@12@31
              11^30^45' はいずれも同じ。
            
              'YYYY-MM-DD' または
              'YY-MM-DD'
              形式の文字列として指定。 この場合も
              ``柔軟''
              な構文が許容される。たとえば、'98-12-31'、'98.12.31'、'98/12/31'、'98@12@31'
              はいずれも同じ。
            
              'YYYYMMDDHHMMSS' または
              'YYMMDDHHMMSS'
              形式の、区切り記号のない文字列(日付として適切なもの)として指定。たとえば、'19970523091528'
              と '970523091528' は
              '1997-05-23 09:15:28'
              として解釈されるが、'971122129015'
              は正しくないため(分の部分が不適切)、'0000-00-00
              00:00:00' になる。
            
              'YYYYMMDD' または
              'YYMMDD'
              形式の、区切り記号のない文字列(日付として適切なもの)として指定。たとえば、'19970523'
              と '970523' は
              '1997-05-23'
              として解釈される、'971332'
              は正しくないため(月と日付の部分が不適切)、'0000-00-00'
              になる。
            
              YYYYMMDDHHMMSS または
              YYMMDDHHMMSS
              形式の数値(日付として適切なもの)として指定。たとえば、19830905132800
              と 830905132800 は
              '1983-09-05 13:28:00'
              として解釈される。
            
              YYYYMMDD または
              YYMMDD
              形式の数値(日付として適切なもの)として指定。たとえば、19830905
              と 830905 は
              '1983-09-05'
              として解釈される。
            
              DATETIME、DATE、または
              TIMESTAMP
              型のコンテキストで許容される値を返す、NOW()
              や CURRENT_DATE
              などの関数の結果として指定。
            
          不適切な
          DATETIME、DATE、TIMESTAMP
          値は、それぞれの型の ``ゼロ''
          値('0000-00-00
          00:00:00'、'0000-00-00'、00000000000000)に変換されます。
        
          日付部分の区切り記号を含む文字列として値を指定する場合、10
          より少ない月または日の値を 2
          桁で指定する必要はありません。'1979-6-9'
          は '1979-06-09'
          と同じ意味になります。同様に、時刻部分の区切り記号を含む文字列として値を指定する場合、10
          より少ない時、分、または秒の値を 2
          桁で指定する必要はありません。'1979-10-30
          1:2:3' は '1979-10-30 01:02:03'
          と同じです。
        
          数値として指定する値は 6、8、12、14
          のいずれかの桁数にします。数値を 8
          桁または 14
          桁の長さにすると、YYYYMMDD
          または YYYYMMDDHHMMSS
          形式であり、最初の 4
          桁が年であると想定されます。数値を 6
          桁または 12
          桁の長さにすると、YYMMDD または
          YYMMDDHHMMSS 形式であり、最初の 2
          桁が年であると想定されます。これら以外の長さの数値は、最も近い長さになるよう先頭にゼロが追加された数値として解釈されます。
        
          区切りなしの文字列として指定した値は、その文字列の長さに基づいて解釈されます。文字列が
          8 文字または 14 文字の場合、最初の 4
          文字が年であると想定されます。それ以外の長さの文字列の場合、最初の
          2
          文字が年であると解釈されます。文字列は、それに含まれている各部分に対応して、左から右に、年、月、日、時、分、秒の値として解釈されます。したがって、6
          文字より少ない文字列は使用できません。たとえば、1999
          年 3 月を表わす値として '9903'
          を指定すると、MySQL
          では、テーブルに日付値として ``ゼロ''
          が格納されます。これは、年と月の値が
          99 と 03
          として指定されていても日の部分がまったくないことから、正しい日付ではないためです。しかし、MySQL
          3.23
          以降では、欠落している月または日の部分を表わすゼロの値を明示的に指定することができます。たとえば、'990300'
          と指定することで、'1999-03-00'
          という日付値を格納することができます。
        
          TIMESTAMP
          カラムでは、正しい値は、表示サイズにかかわらず、その値が指定されたときの完全な精度で格納されます。このことは、暗黙的に次のことを意味します。
        
              カラム型が TIMESTAMP(4) または
              TIMESTAMP(2)
              の場合でも、必ず年、月、日を指定する必要がある。このすべてを指定しないと、値は正しい日付とはならず、0
              が格納される。
            
              ALTER TABLE
              を使用して表示桁数の小さな
              TIMESTAMP
              カラムの桁数を広げると、それまで
              ``非表示''
              になっていた情報が表示される。
            
              同様に、TIMESTAMP
              カラムを狭くしても、単に、値を表示したときに表示される情報が少なくなるだけで、情報自体が失われるわけではない。
            
              TIMESTAMP
              型の値は完全な精度で格納されるが、基盤の格納値に対して直接作用する関数は
              UNIX_TIMESTAMP()
              だけである。他の関数は、取り出され、形式設定された値に作用する。したがって、HOUR()
              や SECOND()
              などの関数は、形式設定された値に
              TIMESTAMP
              値の該当の部分が含まれていない場合、使用できない。たとえば、TIMESTAMP
              カラムの HH
              部分は、表示サイズが 10
              以上でないと表示されないため、それより短い
              TIMESTAMP 値に対して
              HOUR()
              操作を行っても、無意味な値しか得られない。
            
ある日付型の値を別の日付型のオブジェクトに割り当てることは、ある程度までは可能です。しかし、何らかの値の変化や情報の消失が起こる可能性があります。
              DATE 型の値を
              DATETIME または
              TIMESTAMP
              型のオブジェクトに割り当てた場合、値に時刻情報が含まれていないため、結果の値の時刻部分は
              '00:00:00' に設定される。
            
              DATETIME または
              TIMESTAMP 型の値を
              DATE
              型のオブジェクトに割り当てた場合、DATE
              型には時刻情報が格納されないため、結果の値の時刻部分は削除される。
            
              DATETIME、DATE、および
              TIMESTAMP
              型の値はいずれも、同じ形式セットで指定することができるが、値の範囲については、すべての型で同じであるわけではない。たとえば、TIMESTAMP
              型の値は、1970
              より前にしたり、2037
              より後にすることはできない。したがって、'1968-01-01'
              などの日付は、DATETIME 型や
              DATE
              型の値としては正しいが、TIMESTAMP
              型の値としては正しくないため、このようなオブジェクトに割り当てると、値は
              0 に変換される。
            
日付値を指定する際には、次の点に注意してください。
              文字列として指定する値で許容される柔軟な形式は、まぎらわしいことがある。
              たとえば、'10:11:12'
              などの値は、‘:’
              区切り記号のせいで時刻値のように見えるが、日付のコンテキストで使用した場合は、年
              '2010-11-12'
              として解釈される。値
              '10:45:15'
              は、'45'
              が正しい月ではないため、'0000-00-00'
              に変換される。
            
              MySQL サーバでは、日 00-31、月
              00-12、年
              1000-9999
              の有効性に関する基本チェックのみ実行される。この範囲外の日付はすべて
              0000-00-00 に戻される。
              この場合、2002-04-31
              のような誤った日付も格納可能であることに注意する。Web
              アプリケーションでは、追加のチェックを行わずに、フォームからデータを格納できる。日付が有効なものかどうか確認するには、アプリケーションでチェックを行う必要がある。
            
2 桁で指定された年の値は、何世紀かわからないため、あいまいである。MySQL では、次の規則に基づいて、2 桁の年の値が解釈される。
                  範囲 00-69 の年の値は
                  2000-2069 に変換
                
                  範囲 70-99 の年の値は
                  1970-1999 に変換
                
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

