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

UNIXタイムスタンプとMySQLタイムスタンプの違いとは?

UNIXタイムスタンプとMySQLタイムスタンプの基本的な違い

MySQLにおいて、UNIXタイムスタンプは32ビット整数として保存されます。一方、MySQLのTIMESTAMP型も内部的には同じように整数として扱われますが、表示の際には「YYYY-MM-DD HH:MM:SS」という人間が読み取りやすい日時形式に変換される点が大きな違いです。

UNIX_TIMESTAMP関数による確認例

mysql> Select UNIX_TIMESTAMP('2017-09-25 02:05:45') AS 'UNIXタイムスタンプの値';
+---------------------+
| UNIXタイムスタンプの値 |
+---------------------+
| 1506285345          |
+---------------------+
1 row in set (0.00 sec)

上記のクエリを実行すると、UNIXタイムスタンプの値が32ビット整数として保存されていることがわかります。その範囲は、MySQLのINTEGERデータ型の範囲と同一です。

FROM_UNIXTIME関数による確認例

mysql> Select FROM_UNIXTIME(1506283345) AS 'MySQLタイムスタンプの値';
+----------------------+
| MySQLタイムスタンプの値 |
+----------------------+
| 2017-09-25 01:32:25  |
+----------------------+
1 row in set (0.00 sec)

上記のクエリから、MySQLのTIMESTAMP値も内部的には32ビット整数として保存されているものの、表示上は読みやすい日時形式へと変換されることが確認できます。この範囲はMySQLのTIMESTAMPデータ型の範囲(「1970-01-01 00:00:01」UTC〜「2038-01-19 03:14:07」UTC)と一致します。

まとめ

両者の本質的な違いは「保存方法」ではなく「表現形式」にあります。UNIXタイムスタンプは1970年1月1日00:00:00 UTCからの経過秒数を整数値で表すのに対し、MySQLのTIMESTAMP型は同じ値を日時形式に変換して表示します。UNIX_TIMESTAMP()関数で日時を整数に変換し、FROM_UNIXTIME()関数で整数を日時に戻すことで、相互に変換可能です。

  1. MySQLのTINYINT(1)とブール型(BOOLEAN)の違いとは?

    結論から言うと、TINYINT(1)とブール型(BOOLEAN)の間に違いはありません。MySQLでは、BOOLまたはBOOLEANというキーワードは内部的にTINYINT(1)へと変換されます。つまり、BOOLやBOOLEANはTINYINT(1)の別名(シノニム)として扱われるのです。それでは、実際にテーブルを作成して確認してみましょう。BOOLEAN型でテーブルを作成するmysql> create table DemoTable ( isMarried Boolean ); Query OK, 0 rows affected (1.77 sec)次に、作成したテーブルの構造

  2. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (