デフォルトの動作 - SET TIME ZONE LOCAL がデフォルトの動作で、これは SET TIME ZONE コマンドをまったく使用しないのと同じです。デフォルトの動作の場合、データベース エンジンは実行しているオペレーティング システムに基づいてそのタイム ゾーンを設定します。たとえば、SELECT
CURTIME ( ) では現在の現地時刻を返しますが、SELECT
CURRENT_TIME ( ) では、オペレーティング システムの地域のシステム時刻とタイム ゾーンの設定の両方に基づいて現在の世界協定時刻(UTC)を返します。
デフォルトの動作の場合、1996-03-28 や
17:40:46 などの日付/時刻のリテラル値は、現在の現地日付/時刻として解釈されます。また、挿入中には、
「TIMESTAMP」 リテラル値は指定した現在の現地時刻として解釈されます。TIMESTAMP 値は常に UTC 時刻を使って調整されてから内部的に保存され、取得時に現地時刻に変換されます。
間隔を指定した場合の動作 有効なディスプレースメント値が指定されると、
NOW ( )、
CURTIME ( )、または
CURDATE ( ) 用に値を生成するときに、オペレーティング システムのタイム ゾーンのオフセットではなくその値を使用します。たとえば、ディスプレースメントに -02:00 を指定した場合、CURDATE() の現地時刻の値はオペレーティング システムから返される UTC 時刻に -02:00 が加算された値になります。
この動作の場合、日付と時刻のリテラルはそのままの値で現地時刻として解釈されます。「TIMESTAMP」 リテラルでは、ディスプレースメント値を減算した場合に結果が UTC となるような時刻を指定しているものと解釈されます。夏時刻はディスプレースメントで明示的に設定するので、考慮しません。TIMESTAMP 値は常に UTC 時刻を使って内部的に保存されます。
直接の SELECT NOW ( ) で表示される値は、INSERT SELECT
NOW ( ) 構文によってディスクに保存される値とは異なることに注意することが重要です。また、SELECT
CURRENT_TIMESTAMP ( ) の表示値も、CURRENT_TIMESTAMP() の値を INSERT した後でそれを SELECT した場合(INSERT SELECT CURRENT_TIMESTAMP() 構文)に表示される値とは異なることに注意してください。これは、データ ファイルに保存したリテラル値を取得するときに値が調整されるからです。