時刻を保存するために適切な MySQL の datetime 型を選択する方法

時刻を保存するために適切な MySQL の datetime 型を選択する方法

データベースを構築してプログラムを書くとき、日付と時刻の使用は避けられません。データベースには、timestamp や datetime など、さまざまな日付と時刻のフィールドがあり、int を使用して Unix タイムスタンプを保存します。

初心者だけでなく、経験豊富なプログラマーの中にもまだ混乱している人がいます。日付と時刻を保存するにはどの型を使用すればよいのでしょうか?

次に、それぞれの特性を段階的に分析し、ニーズに応じて適切なフィールドタイプを選択して保存できるようにします(親が子供の頃から近所の子供と自分を比較するのと同じように、利点と欠点を比較します)。

日付時刻とタイムスタンプ

  1. datetime は、カレンダーの時刻と時計の時刻を組み合わせたもの、つまり特定の時刻を意味します。
  2. タイムスタンプは、時間を記録するのに適しています。たとえば、私は 2016-08-02 10:35:52 に東部標準時ゾーン 8 にいて、あなたは日本にいます (東部標準時ゾーン 9 の時間は 2016-08-02 11:35:52)。私たちはチャットをしており、データベースは時間を記録します。取得後、私の時間は 2016-08-02 10:35:52 で、日本のあなたの時間は 2016-08-02 11:35:52 です。したがって、タイムゾーンの計算を考慮する必要はありません。
  3. 時間範囲はタイムスタンプの制限(1970-2038)です。もちろん、日付時刻(1000-9999)では劉備が生まれた時期を記録できません(161)。

タイムスタンプとUNIXタイムスタンプ

  1. 表示は直感的であるため、問題のトラブルシューティングが容易になります。多くの long int 数値よりもはるかに見栄えがよいです。
  2. int は 1970 年から累積を開始しますが、int でサポートされる範囲は 1901-12-13 から 2038-01-19 03:14:07 までです。より広い範囲が必要な場合は、bigInt に設定する必要があります。ただし、この時間にはミリ秒は含まれません。ミリ秒が必要な場合は、浮動小数点数として定義する必要があります。 datetime と timestamp には、ネイティブで 6 桁のマイクロ秒が付属しています。
  3. タイムスタンプには、上記の項目 2 と同じように、独自のタイムゾーン変換があります。
  4. フロントエンドでユーザーが入力する時間は、通常、日付型です。int として保存される場合は、保存前と取得後に処理する必要があります。

要約:

  1. タイムスタンプは、更新/作成/公開/ログイン時間/購入時間/ログイン時間/登録時間など頻繁に変更される情報を記録し、最新かつ十分であり、自動タイムゾーン処理により、例えば海外でのショッピングや海外への事業展開の際にも役立ちます。
  2. datetime は、サーバーがスケジュールされたタスクやフィットネス運動計画の時間などを実行する時間などの固定時間を記録します。どのタイムゾーンでも何かを実行するには固定時間が必要です。タイムゾーンがタイムスタンプを超える場合、タイムゾーンが必要な場合はタイムゾーン処理を覚えておく必要があります。
  3. UNIX タイムスタンプはあまり使い勝手がよくありません。範囲の比較に関しては、timestamp と datetime が使えます。
  4. タイムゾーンを気にしない、または独自のタイムゾーンプランがある場合は、好きなものを選択できます。
  5. Laravel は国際的に設計されたフレームワークです。プログラマーの利便性とデータベース設計標準への準拠のため、created_at と updated_at でタイムスタンプが使用されるのは当然です。
  6. 範囲とタイムゾーンの問題を解決する時間タイプはありますか?これは不可能です。tinyInt や BigInt もあるのではないでしょうか?必要なものを取得すれば、MySQL ではデータベース フィールドを変更できます。
  7. 誕生日は、年/月/日などの複数のフィールドを使用して保存できるため、特定の日に誕生日を迎えるユーザーを簡単に見つけることができます (User::where(['month' => 8, 'day' => 12])->get())

プロジェクトを構築するときは、どのプロジェクトがビジネス シナリオに適しているかを慎重に検討する必要があります。どれを選ぶべきでしょうか?需要によります。

これで、時間を保存するために適切な MySQL の日付と時刻の型を選択する方法に関するこの記事は終了です。MySQL の日付と時刻の型の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL の時間タイプの選択
  • MySQLストレージ時間タイプの選択に関する問題の説明
  • mysqlの時間タイプの選択について
  • MySql と Java の時間型の解析
  • MySQL の日付データ型と時刻型の使用法の概要
  • MySQL の時間タイプとモードの詳細

<<:  初心者でもjsのtypeofとinstanceofの違いを理解できます

>>:  最小限の展開で CentOS8 に OpenStack Ussuri をインストールする方法の詳細なチュートリアル

推薦する

バックエンドから返される 100,000 個のデータをフロントエンドでより適切に表示するにはどうすればよいですか?

目次予備作業バックエンド構築フロントエンドページダイレクトレンダリングsetTimeout ページン...

DockerコンテナでのMySQLデータのインポート/エクスポートの詳細な説明

序文MySQL データのインポートとエクスポートは mysqldump コマンドで解決できることは誰...

Tomcatのデフォルトプログラム公開パスの使用と変更についての説明

tomcat7 のデフォルトのプログラム公開パスは tomcat/webapps/ROOT/ です。...

Linux でディスク IO を表示し、読み取りと書き込みで高い IO を占有するプロセスを見つけます。

背景 - オンラインアラートオンライン サーバーがアラームを発し、ディスク使用率 disk.util...

MySQLでSELECT文が実行される仕組み

目次1. マクロの観点からMySQLを分析する2. SQL ステートメントを実行するには、どの程度の...

Vue3ライフサイクル関数とメソッドの詳細な説明

1. 概要いわゆるライフサイクル機能とは、特定の条件下で自動的にトリガーされる機能です。 2. VU...

分散監視システムZabbixはSNMPとJMXチャネルを使用してデータを収集します

前回の記事では、Zabbix のパッシブ、アクティブ、Web 監視に関するトピックについて学習しまし...

JSの矢印関数におけるこのポイントの詳細な説明

矢印関数は ES6 の新機能です。独自の this はありません。その this ポイントは外部のコ...

JavaScriptイテレータを学ぶ

目次導入js のイテレータはどのように見えるか反復プロトコル反復可能なプロトコルイテレータプロトコル...

オンラインチャットを実現するVue+sshフレームワーク

この記事では、オンラインチャットを実現するためのVue + sshフレームワークの具体的なコードを参...

MYSQLデータベーステーブル構造の最適化方法の詳細な説明

この記事では、例を使用して、MYSQL データベース テーブル構造を最適化する方法を説明します。ご参...

マウスを動かしたときにセカンダリメニューバーを実装するために HTML+CSS を使用する例

この記事では、マウスを動かしたときにセカンダリ メニュー バーを実装するために HTML+CSS を...

Node.js mysqlクライアントが認証プロトコルをサポートしていない問題を解決する

序文mysql モジュール (プロジェクト アドレスは https://github.com/mys...

HTMLタグと基本要素の学習のまとめ

1. HTML の要素とタグ<br />要素は、1 つのタグまたは 1 組のタグによって...