MySQL では、TIME
値の取り出しと表示は 'HH:MM:SS'
形式 (時間の部分の値が大きい場合は 'HHH:MM:SS'
形式) で行われます。TIME
値の範囲は、'-838:59:59'
から '838:59:59'
です。TIME
型は、時間 (24 時間以下にする必要があります) を表すだけでなく、経過時間や、2 つのイベント間の時間 (24 時間よりも非常に長くなる場合も、負になる場合もあります) を表すこともできるので、時間の部分は非常に大きくなる可能性があります。
MySQL が TIME
値を認識する形式は複数あり、そのいくつかにはマイクロ秒 (6 秒) までの精度で後続の小数秒部分を含めることができます。セクション9.1.3「日付リテラルと時間リテラル」を参照してください。MySQL の小数秒のサポートの詳細は、セクション11.3.6「時間値での小数秒」を参照してください。特に、MySQL 5.6.4 以降では、TIME
カラムに挿入された値の小数部はすべて破棄されずに格納されます。小数部が含まれている場合、TIME
値の範囲は '-838:59:59.000000'
から '838:59:59.000000'
です。
TIME
カラムに省略された値を割り当てる場合は注意してください。MySQL は、コロン付きの省略された TIME
値を時間と解釈します。つまり、'11:12'
は '00:11:12'
ではなく '11:12:00'
を意味します。MySQL は、右端の 2 桁が秒を表すという仮定を使用して (つまり、時間としてではなく経過時間として)、コロンのない省略された値を解釈します。たとえば、'1112'
と 1112
は '11:12:00'
(11 時 12 分) を表すように見えますが、MySQL では '00:11:12'
(11 分 12 秒) と解釈されます。同様に、'12'
や 12
は '00:00:12'
と解釈されます。
時間部分と小数秒部分との間の区切り文字として認識される唯一の文字が小数点です。
デフォルトでは、TIME
範囲外にあるが、それ以外は有効な値は、範囲のもっとも近い終点に切り落とされます。たとえば、'-850:00:00'
と '850:00:00'
は、それぞれ '-838:59:59'
と '838:59:59'
に変換されます。無効な TIME
値は、'00:00:00'
に変換されます。'00:00:00'
はそれ自体が有効な TIME
値なので、元の値が '00:00:00'
と指定されたのかどうか、無効であったかどうか、テーブルに格納された '00:00:00'
の値から判断できません。
無効な TIME
値の制限を厳しくするには、エラーが発生するように厳密な SQL モードを有効にしてください。セクション5.1.7「サーバー SQL モード」を参照してください。