時刻フィールド タイプには、日時とタイムスタンプを指定できます。次の表に、この 2 つの違いを示します:
timestamp Translated中国語にすると「タイムスタンプ」です。現在時刻から Unix の初年度 (1970 年 1 月 1 日 0:00:00) までの秒数です。4 バイトを占め、UTC 形式で保存されます。現在のタイムゾーンは自動的に取得され、変換されます。日時は 8 バイトで格納され、タイム ゾーンの取得は実行されません。つまり、タイムスタンプの場合、保存時のタイムゾーンと取得時のタイムゾーンが異なると、取り出されるデータも異なります。日時の場合は、保存したものが取得されます。ここでは、一般的なケースと選択のヒントをいくつか示します。
製造時期や賞味期限などの保存範囲に応じて選択してください。datetime の方が保存できる範囲が広いため、datetime を選択することをお勧めします。
このデータ行の挿入時刻と変更時刻を記録するには、タイムスタンプを使用することをお勧めします。
タイムゾーンに関連する時間フィールドのタイムスタンプを選択します。
年、日付、時刻を表すだけの場合は、年、日付、時刻を使用することもできます。これらはそれぞれ 1 バイト、3 バイト、3 バイトを占有します。彼らのセットです。
タイムスタンプ フィールドがクエリで頻繁に使用される場合は、MySQL の組み込み関数 FROM_UNIXTIME()
、UNIX_TIMESTAMP()
を使用することもできます。日付を変換します。タイムスタンプ数値を使用して前後に変換します。変換後、INT UNSIGNED を使用して時刻を保存できます。数値は連続しており、占有スペースが少なく、インデックスを使用してクエリのパフォーマンスを向上させることができます。以下は、テーブル作成ステートメントとタイムスタンプ関連の変換 SQL のサンプルです:
CREATE TABLE `tb_time` ( `increment_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键', `col1` datetime NOT NULL DEFAULT '2020-10-01 00:00:00' COMMENT '到期时间', `unix_createtime` int unsigned NOT NULL COMMENT '创建时间戳', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`increment_id`), KEY `idx_unix_createtime` (`unix_createtime`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='time测试表'; # 插入数据 insert into tb_time (unix_createtime,create_time) values (UNIX_TIMESTAMP(now()),now()); # 时间戳数字与时间相互转换 select UNIX_TIMESTAMP('2020-05-06 00:00:00') select FROM_UNIXTIME(1588694400)
以上がmysqlの時間型とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。