「MySQL」-日付と時刻Type @ 20210225

DATEおよびDATETIME範囲の説明の場合、「サポートされている」とは、以前の値は正しく機能する可能性がありますが、保証されていないことを意味します。

の種類 サイズ(B) 範囲 表示形式 使用する
年[(4)] 1 0000、1901〜2155 YYYY 年の値
時間[(fsp)] 3 -838:59:59〜838:59:59 HH:MM:SS [.fraction] 時間の値または期間。文字列または数値を使用して値を挿入できます。
タイムスタンプ[(fsp)] 4 UTC:1970-01-01 00:00:01.000000〜2038-01-19 03:14:07.999999 YYYYMMDD HHMMSS 日付と時刻の混合値、タイムスタンプ
DATETIME [(fsp)] 8 1000-01-01 00:00:00.000000〜9999-12-31 23:59:59.999999 YYYY-MM-DD HH:MM:SS [.fraction] 日付と時刻の混合値。文字列または数値を使用して値を挿入できます。
日付 4 1000-01-01〜9999-12-31 YYYY-MM-DD 日付値。文字列または数値を使用して値を挿入できます。

MySQLでは、TIME、DATETIME、およびTIMESTAMPは小数秒をサポートし、精度はマイクロ秒(6桁)まで高くすることができます。

fspで
小数秒を含む列を定義するには、構文type_name(fsp)を使用します。ここで、type_nameはTIME、DATETIME、またはTIMESTAMPであり、fspは小数秒の精度です。fsp値(指定されている場合)は0から6の間でなければなりません。値0は、小数部がないことを意味します。省略した場合、デフォルトの精度は0です(以前のMySQLバージョンとの互換性のために使用される標準SQLのデフォルト値6とは異なります)。

テーブル内のすべてのTIMESTAMPまたはDATETIME列は、自動初期化および更新プロパティを持つことができます。DEFAULT句とONUPDATE句を使用して、自動初期化DATETIME列の更新の現在の日付と時刻を指定できます

TIMESTAMPについてTIMESTAMP
値は、エポック( '1970-01-01 00:00:00' UTC)から経過した秒数として格納されます。
TIMESTAMPは、値「1970-01-01 00:00:00」を表すことができません。これは、エポックの開始から0秒に相当し、値0は「0000-00-0000:00:00」を意味するように予約されているためです。 "。
MySQLがTIMESTAMP定義を処理する方法は、システム変数explicit_defaults_for_timestampによって異なります。
明示的なdefaults_for_timestampが有効になっている場合、DEFAULTCURRENT_TIMESTAMPまたはONUPDATECURRENT_TIMESTAMP属性はどのTIMESTAMP列にも自動的に割り当てられません。それらは列定義に明示的に含まれている必要があります。さらに、NOT NULLとして明示的に宣言されていないTIMESTAMPは、NULL値を許可します。
Expressic_defaults_for_timestampが無効になっている場合、MySQLはそれを次のように処理します。

	*特に指定のない限り、テーブルの最初のTIMESTAMP列は、値が明示的に指定されていない場合、最新の変更の日付と時刻に自動的に設定されるように定義されています。これにより、TIMESTAMPを使用してINSERTまたはUPDATE操作のタイムスタンプを記録できます。NULL属性を使用してNULL値が定義されていない限り、TIMESTAMP列をNULL値に割り当てることにより、現在の日時に設定することもできます。
	* DEFAULTCURRENT_TIMESTAMPおよびONUPDATE CURRENT_TIMESTAMP列定義句を使用して、自動初期化を指定し、現在の日付と時刻に更新することができます。前述のように、デフォルトでは、最初のTIMESTAMP列にこれらの属性があります。ただし、テーブル内のTIMESTAMP列は、これらの属性を持つものとして定義できます。

YEAR型についてYEAR
(2)データ型は非推奨になり、MySQL5.7.5でサポートが削除されました。YEAR(2)列をYEAR(4)に変換するには、11.3.4項「YEAR(2)の制限とYEAR(4)への移行」を確認してください

その他の考慮事項
SUM()およびAVG()集計関数は、値を数値に変換し、最初の数字以外の文字以降のすべてを破棄するため、時間値には適用されません。この問題を解決するには、最初に時間を値に変換し、次に集計操作を実行してから、それを時間値に変換する必要があります。

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col)))FROM tbl_name; 
SELECT FROM_DAYS(SUM(TO_DAYS(date_col)))FROM tbl_name;

MAXDBSQLモードを有効にしてMySQLサーバーを実行できます。この場合、TIMESTAMPはDATETIMEと同じです。テーブルの作成時にこのモードが有効になっている場合、TIMESTAMP列はDATETIME列として作成されます。したがって、これらの列はDATETIME表示形式を使用し、同じ値の範囲を持ち、現在の日付と時刻に自動的に初期化または更新されません。セクション5.1.8「サーバーSQLモード」を参照してください

フィールドのデフォルト値

時間と日付のフィールドにデフォルト値を設定できます。

ただし、これは特定のバージョンに関連しており、バージョンが異なれば動作も異なります。

MySQL 5.5

日付列のデフォルト値は、NOW()CURRENT_DATEなどの関数に設定することはできません

ただしTIMESTAMP列のデフォルト値としてCURRENT_TIMESTAMP使用できます。

MySQL 5.6.5

TIMESTAMPDATETIME自動的に初期化され、現在の時刻と日付に更新されます。

別の使用法があります。更新時に、列が更新されると、現在の日付に自動的に更新されます。

CREATE TABLE t1(
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP、
  dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 
);

参照

MySQL 5.5で日付をCURRENT_TIMESTAMPにデフォルト設定できない
MySQLDatetime列のデフォルト値をどのように設定しますか?
11。1。2日付と時刻のタイプの概要
11.3.5TIMESTAMPとDATETIMEの自動初期化と更新

おすすめ

転載: blog.csdn.net/u013670453/article/details/114106529