Maison >base de données >tutoriel mysql >Quelle est la différence entre les types de données MySQL DATETIME et TIMESTAMP ?

Quelle est la différence entre les types de données MySQL DATETIME et TIMESTAMP ?

王林
王林avant
2023-09-17 23:41:031214parcourir

MySQL DATETIME 和 TIMESTAMP 数据类型有什么区别?

Les deux types de données stockent les données au format « AAAA-MM-JJ HH:MM:SS » et incluent la date et l'heure. Malgré ces similitudes, ils présentent les différences suivantes -

  • Range - Le type de données datetime prend en charge les dates et heures entre 1000 - 01-01 00:00:00 et 9999-12-31 23 : 59:59. Cependant, le type de données d'horodatage prend en charge les dates et heures comprises entre « 1970-01-01 00:00:01 » et « 2038-01-19 08:44:07 ».
  • Taille - Datetime nécessite 5 octets plus 3 octets supplémentaires pour le stockage de données en fractions de secondes. D'autre part, le type de données d'horodatage nécessite 4 octets plus 3 octets supplémentaires pour le stockage de données en fractions de secondes. Mais avant MySQL 5.6.4, DateTime nécessitait 8 octets plus 3 octets supplémentaires pour le stockage de données en fractions de seconde.
  • Conversion d'un fuseau horaire à un autre - En fait, dans MySQL5+, les valeurs d'horodatage sont converties de l'heure actuelle en UTC et vice versa, tandis que datetime ne subit aucune conversion.
  • Indexation - Les données d'horodatage peuvent être indexées, mais pas les données date/heure.
  • Indexation - Les données d'horodatage peuvent être indexées, mais pas les données date/heure. li>
  • Query Cache - Les requêtes de type de données timestamp peuvent être mises en cache, mais les requêtes de type datetime ne peuvent pas être mises en cache.

Ce qui précède présente quelques-unes des principales différences entre les types de données DATETIME et TIMESTAMP, l'exemple suivant le démontrera -

Exemple

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)

Maintenant, dans la requête suivante, nous avons changé le fuseau horaire en UTC-05:00 et ont Les résultats pour les tables de type de données TIMESTAMP ont également changé.

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)

sortie

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer