Les chaînes prennent plus de place !
L'efficacité de la comparaison des dates du stockage de chaînes est relativement faible (comparaison caractère par caractère) et ne peut pas être calculée et comparée à l'aide d'API liées aux dates.
Datetime et Timestamp sont deux types de données similaires pour stocker l'heure fournie par MySQL.
Comment choisir entre eux ?
Habituellement, nous préférons Timestamp
Le type DateTime n'a pas d'informations sur le fuseau horaire (le fuseau horaire n'est pas pertinent)
Lorsque votre fuseau horaire change, par exemple lorsque votre serveur change d'adresse ou change l'heure de connexion du client zone Si elle est définie, l'heure à laquelle vous lisez dans la base de données sera erronée.
L'horodatage est lié au fuseau horaire.
La valeur du champ Type d'horodatage changera avec le changement du fuseau horaire du serveur et sera automatiquement convertie à l'heure correspondante. Pour faire simple, dans différents fuseaux horaires, la valeur de ce champ sera différente pour le même. enregistrer lorsqu'on lui demande.
Une démonstration pratique ci-dessous !
Créer une instruction SQL de table :
CREATE TABLE `time_zone_test` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `date_time` datetime DEFAULT NULL, `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Insérer des données :
INSERT INTO time_zone_test(date_time,time_stamp) VALUES(NOW(),NOW());
Afficher les données :
select dsqlate_time,time_stamp from time_zone_test;
Résultat :
+--------------------- +---------------------+
| date_heure | horodatage |
+------------------ - ---------------------+
| 11/01/2020 09:53:32 | 11/01/2020 09:53:32 |
+ ---------------------+---------------------+
Modifier l'heure actuelle zone de session :
set time_zone='+8:00';
Voir à nouveau les données :
+---------------------+------------- ----+
| date_heure | horodatage |
+----------+---------- ----------+
| 2020-01-11 09:53:32 | 2020-01-11 17:53:32 |
+-------- ----+---------------------+
Extension : Quelques commandes SQL courantes sur les paramètres de fuseau horaire MySQL
1 . Vérifiez le fuseau horaire de la session actuelle
SELECT @@session.time_zone;
2. Définissez le fuseau horaire de la session actuelle
SET time_zone = 'Europe/Helsinki'; SET time_zone = "+00:00";
3. Paramètre de fuseau horaire global de la base de données
SELECT @@global.time_zone;
4 Définissez le fuseau horaire global
SET GLOBAL time_zone = '+8:00'; SET GLOBAL time_zone = 'Europe/Helsinki';
Timestamp. n'a besoin que de 4 octets d'espace de stockage, mais DateTime nécessite 8 octets d'espace de stockage. Cependant, cette approche soulève également le problème du fait que Timestamp a une durée plus limitée.
DateTime
: 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59DateTime
:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
Timestamp
Timestamp
: 1970-01 -01 00:00:01 ~ 2037-12-31 23:59:59Timestamp présente des différences subtiles selon les différentes versions de MySQL. 3. Regardons à nouveau l'espace de stockage du type de date MySQLLa figure suivante montre l'espace de stockage occupé par le type de date dans la version MySQL 5.6 :
On peut voir que MySQL après 5.6. 4 a un besoin supplémentaire 0 ~ 3 Le nombre de décimales dans l'octet. DataTime et Timestamp occuperont des espaces de stockage différents une fois stockés. Pour plus de commodité, dans cet article, nous avons toujours par défaut que Timestamp ne nécessite que 4 octets d'espace de stockage, mais DateTime nécessite 8 octets d'espace de stockage. 4. L'horodatage numérique est-il un meilleur choix ? Souvent, nous utilisons également des valeurs de type int ou bigint, c'est-à-dire des horodatages, pour représenter l'heure.Cette méthode de stockage présente certains avantages du type Timestamp, et son utilisation pour effectuer des opérations de tri et de comparaison des dates sera plus efficace, et elle est également très pratique sur tous les systèmes. Après tout, il ne s'agit que d'une valeur stockée. L'inconvénient est également évident, c'est-à-dire que la lisibilité des données est trop mauvaise et que vous ne pouvez pas voir intuitivement l'heure précise.
La définition de l'horodatage est la suivante :
La définition de l'horodatage est de partir d'une heure de base. Cette heure de base est "1970-1-1 00:00:00 +0:00". temps Initialement exprimé sous forme d'un nombre entier, mesuré en secondes, ce temps entier continue d'augmenter au fur et à mesure que le temps passe. De cette façon, je n'ai besoin que d'une seule valeur pour représenter parfaitement le temps, et cette valeur est une valeur absolue, c'est-à-dire que peu importe où vous vous trouvez dans n'importe quel coin de la terre, l'horodatage représentant le temps est le même, généré Les valeurs sont tous identiques et il n'y a pas de notion de fuseau horaire, donc aucune conversion supplémentaire n'est requise lors de la transmission de l'heure dans le système. Elle est uniquement convertie en heure locale au format chaîne lorsqu'elle est affichée à l'utilisateur.
Opérations réelles dans la base de données :mysql> select UNIX_TIMESTAMP('2020-01-11 09:53:32'); +---------------------------------------+ | UNIX_TIMESTAMP('2020-01-11 09:53:32') | +---------------------------------------+ | 1578707612 | +---------------------------------------+ 1 row in set (0.00 sec) mysql> select FROM_UNIXTIME(1578707612); +---------------------------+ | FROM_UNIXTIME(1578707612) | +---------------------------+ | 2020-01-11 09:53:32 | +---------------------------+ 1 row in set (0.01 sec)
Chaque méthode a ses propres avantages, et la meilleure méthode est basée sur le scénario réel. Faisons une comparaison simple de ces trois méthodes pour vous aider à choisir le bon type de données pour la durée de stockage en développement réel :
🎜🎜🎜[mysqld] sql-mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
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!