MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQL DATETIMEデータ型とTIMESTAMPデータ型の違いは何ですか?


どちらのデータ型も、データを「YYYY-MM-DD HH:MM:SS」形式で保存し、日付と時刻を含みます。これらの類似性にもかかわらず、次の違いがあります-

  • 範囲 −日時データ型は、1000-01-0100:00:00から9999-12-3123:59:59の範囲の時刻とともに日付をサポートします。ただし、タイムスタンプデータ型は、「1970-01-0100:00:01」から「2038-01-1908:44:07」の範囲の日付と時刻をサポートします。
  • サイズ −日時には、小数秒のデータを保存するために5バイトと3バイトが必要です。一方、タイムスタンプデータ型では、小数秒のデータを保存するために4バイトと3バイトが必要です。ただし、MySQL 5.6.4より前では、DateTimeには8バイトと、小数秒のデータ保存用に3バイトが必要です。
  • あるタイムゾーンから別のタイムゾーンへの変換 −実際にはMySQL5 +では、タイムスタンプ値は現在​​の時刻からUTCに、またはその逆に変換されますが、日時は変換を行いません。
  • インデックス作成 −タイムスタンプデータに対してインデックスを作成できますが、日時データをインデックスに登録することはできません。
  • クエリのキャッシュ −タイムスタンプデータ型のクエリはキャッシュできますが、日時データ型のクエリはキャッシュできません。

上記は、DATETIMEデータ型とTIMESTAMPデータ型の主な違いであり、次の例でそれを示します-

mysql> Create table test_datetime(time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.44 sec)

mysql> INSERT INTO test_datetime (time) values (CURRENT_TIMESTAMP);
Query OK, 1 row affected (0.04 sec)

mysql> Select * from test_datetime;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 17:29:03 |
+---------------------+
1 row in set (0.00 sec)

mysql> Create table test_timestamp(time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.64 sec)

mysql> INSERT INTO test_timestamp (time) values (CURRENT_TIMESTAMP);
Query OK, 1 row affected (0.06 sec)

mysql> Select * from test_timestamp;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 17:29:50 |
+---------------------+
1 row in set (0.00 sec)

次のクエリでは、タイムゾーンをUTC-05:00に変更し、TIMESTAMPデータ型のテーブルの結果を変更しています。

mysql> SET @@session.time_zone = '-5:00';
Query OK, 0 rows affected (0.00 sec)

mysql> Select * from test_timestamp;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 06:59:50 |
+---------------------+
1 row in set (0.00 sec)
出力
mysql> Select * from test_datetime;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 17:29:03 |
+---------------------+
1 row in set (0.00 sec)

  1. MySQLでは、!=NULLとISNOT NULLの違いは何ですか?

    値を!=NULLと比較すると、NULLが返されます。したがって、!=NULLは無意味です。 !=NULLとISNOT NULLの違いを確認するために、最初にテーブルを作成しましょう。 まずテーブルを作成しましょう- mysql> create table DemoTable1970    (    Value int    ); Query OK, 0 rows affected (0.00 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTa

  2. Python関数datetime.now()とdatetime.today()の違いは何ですか?

    関数datetime.now()はキーワード引数としてtzinfoを取りますが、datetime.today()はキーワード引数を取りません。ドキュメントの引用- datetime.now()は、現在のローカルの日付と時刻を返します。オプションの引数tzがNoneまたは指定されていない場合、これはtoday()のようになりますが、可能であれば、time.time()タイムスタンプを通過することで得られるよりも高い精度を提供します(たとえば、これは、 C gettimeofday()関数)。