MySQL における datetime と timestamp の違いと選択

MySQL における datetime と timestamp の違いと選択

MySQLでよく使用される 2 つの時間保存タイプは、 datetimetimestampです。テーブルを構築する際には、それらをどのように選択するかを考慮する必要があります。それぞれの違いと選び方についてお話しします。

1 違い

1.1 スペース占有

タイプバイトを占有する表現
日時8バイトyyyy-mm-dd 時:分:秒
タイムスタンプ4バイトyyyy-mm-dd 時:分:秒

1.2 表現範囲

タイプ表現範囲
日時'1000-01-01 00:00:00.000000' から '9999-12-31 23:59:59.999999'
タイムスタンプ'1970-01-01 00:00:01.000000' から '2038-01-19 03:14:07.999999'

timestamp は中国語では「 timestamp 」と翻訳され、現在の時刻から Unix 年 1 (1970 年 1 月 1 日 0 時 0 分 0 秒) までの秒数です。一部の時間計算では、 datetime形式の場合、計算が難しくなります。たとえば、私が1994-1-20 06:06:06に生まれ、現在の時刻が2016-10-1 20:04:50の場合、私が生きてきた秒数を計算するには、datetime を変換する関数が必要ですが、 timestamp は直接減算できます。

1.3 タイムゾーン

timestamp 4 バイトのみで、UTC 形式で保存されます。現在のタイムゾーンを自動的に取得し、変換を実行します。

datetimeが 8 バイトとして保存され、タイム ゾーンの取得は実行されません。

つまり、 timestampの場合、保存時と取得時のタイムゾーンが異なると、取得されるデータも異なります。 datetimeの場合、入力したものが返されます。

もう 1 つの違いは、NULL が格納されている場合、 timestamp自動的に現在の時刻を格納するのに対し、 datetime NULL を格納することです。

2 テスト

新しいテーブルを作成しましょう

データの挿入

データを見ると、 NULLが格納されていることがわかります。Timestamp timestamp現在の時刻を自動的に格納しますが、 datetimeNULL

タイムゾーンを East 9 に変更して、データを再度確認します。 timestamp datetimeより 1 時間長いことがわかります。

挿入された値が無効な場合はどうなりますか?挿入された時間がタイムスタンプの場合

結果は0000-00-00 00:00:00です。公式の説明によると、挿入された値が無効な場合は0000-00-00 00:00:00変換されますが、タイムスタンプはMySQL有効な時間形式ではありません。

では、どのようなフォームを挿入できるのでしょうか?ここに3つあります

//以下はすべてMySQLで許可されている形式であり、MySQLは自動的に処理します
2016-10-01 20:48:59
2016#10#01 20/48/59
20161001204859

3つの選択肢

時間がLinux時間を超える場合、またはサーバーのタイムゾーンが異なる場合は、 datetimeを選択することをお勧めします。

自動挿入や自動更新時間機能を使用する場合は、 timestampを使用できます。

年、日付、時刻だけを表現したい場合は、それぞれ 1、3、3 バイトを占めるyeardatetimeも使用できます。datetime datetimeそれらのコレクションです。

MySQLdatetimetimestampの違いと選択に関するこの記事はこれで終わりです。MySQL のdatetimetimestampの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL における Datetime と Timestamp の使用の概要
  • MySQL から Excel にテーブルデータをエクスポートする際の日時形式に関する簡単な説明
  • MySQL における datetime と timestamp の違いと使い方
  • MySQL で datetime 型のデフォルト値を設定する方法
  • MySQL データベースで datetime 型を作成する方法

<<:  ウェブ画像のホットリンクと座標値を設定するサンプルコード

>>:  TypeScriptジェネリックの使用

推薦する

Tomcatにデプロイされたアプリケーションがフロントエンドページにアクセスできない問題について

最近、実践的なトレーニング プロジェクトを実行する際に ssm フレームワークを使用しました。プロジ...

JS 継承の詳細

目次序文準備する要約する継承方法プロトタイプ継承プロトタイプチェーン継承コンストラクタの借用(クラス...

Node.jsをゼロから学ぶ

目次URL モジュール1. 解析メソッド2. フォーマット方法3. 解決方法イベントモジュール(イベ...

Windows 7 64 ビットに最新バージョンの MySQL サーバーをインストールする方法のグラフィック チュートリアル

最近、MySQL データベースを勉強していて、設定ファイルを頻繁に変更したため、MySQL データベ...

HTMLページの読み込み速度を上げる方法

(1)HTTPリクエストを減らす。 (リソース ファイルをマージし、イメージ スプライトを使用します...

Better-scrollはメニューとコンテンツをリンクする効果を実現します

1. 基本的な使い方 <!DOCTYPE html> <html lang=&qu...

HTML でフォントの色を設定する方法と、PS を使用して HTML で正確なフォントの色を取得する方法

1. HTMLフォントカラー設定HTML では、フォント タグを使用してフォント コンテンツの色を設...

Vue ログインページ用の動的パーティクル背景プラグインの実装

目次動的パーティクル効果は次のとおりです。プラグインをインストールする動的パーティクル効果は次のとお...

aタグのname属性とid属性を使用してページ内を移動する方法

以前はaタグのname属性を使ってジャンプする方法しか知らなかったのですが、idも使えることを今日知...

node.js で PC 上の WeChat アプレット パッケージを復号化するための処理アイデア

目次アプレットのソースコードはどこにありますか? PC ミニプログラムはどのように暗号化されますか?...

JavaScript関数の使い方の詳細な説明

目次1. 関数を宣言する2. 関数の呼び出し3. 関数パラメータ4. 関数の戻り値5. 議論の使用6...

Spring Boot 階層化パッケージング Docker イメージの実践と分析 (推奨)

目次1. Springbootプロジェクトを準備する2. 関連する設定を実行する3.パッケージ4.D...

インデックスを設計する際の原則は何ですか? インデックスの障害を回避するにはどうすればよいでしょうか?

目次主キーインデックス頻繁にクエリされるフィールドのインデックスを作成する大きなフィールドのインデッ...

vue-router を遅延ロードする 3 つの方法のまとめ

遅延読み込みを使用しない 'vue' から Vue をインポートします。 '...

JavaScript の find() メソッドと filter() メソッドの違いのまとめ

目次序文JavaScript find() メソッドJavaScript filter() メソッド...