Le type de champ d'heure peut choisir datetime et timestamp. Voici un tableau pour montrer la différence entre les deux :
timestamp est traduit en chinois par "timestamp", qui est l'heure actuelle. vers Unix yuan Le nombre de secondes dans l'année (0 heures, 0 minutes, 0 secondes au 1er janvier 1970) occupe 4 octets et est stocké au format UTC. Il récupérera automatiquement le fuseau horaire actuel et le convertira. Datetime est stocké sur 8 octets et aucune récupération de fuseau horaire n'est effectuée. Autrement dit, pour l'horodatage, si le fuseau horaire lors du stockage est différent du fuseau horaire lors de la récupération, les données extraites seront également différentes. Pour datetime, vous obtenez ce que vous enregistrez. Voici quelques cas courants et suggestions de sélection.
Sélectionnez en fonction de la plage de stockage, telle que le temps de production, la durée de conservation, etc. Il est recommandé de sélectionner la date et l'heure, car la date et l'heure peuvent stocker une plage plus large.
Il est recommandé d'utiliser l'horodatage pour enregistrer l'heure d'insertion et l'heure de modification de cette ligne de données.
Sélectionnez l'horodatage pour le champ horaire lié au fuseau horaire.
Si vous souhaitez simplement représenter l'année, la date et l'heure, vous pouvez également utiliser l'année, la date et l'heure. Ils occupent respectivement 1, 3 et 3 octets, et datetime est leur collection.
Si le champ d'horodatage est souvent utilisé pour les requêtes, nous pouvons également utiliser la fonction intégrée de MySQLFROM_UNIXTIME()
、UNIX_TIMESTAMP()
pour convertir les nombres de date et d'horodatage dans les deux sens. Après la conversion, INT UNSIGNED peut être utilisé pour stocker l'heure. continu et prend moins de place. Et vous pouvez utiliser des index pour améliorer les performances des requêtes. Ce qui suit est un exemple d'instruction de création de table et de conversion SQL liée à l'horodatage :
CREATE TABLE `tb_time` ( `increment_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键', `col1` datetime NOT NULL DEFAULT '2020-10-01 00:00:00' COMMENT '到期时间', `unix_createtime` int unsigned NOT NULL COMMENT '创建时间戳', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`increment_id`), KEY `idx_unix_createtime` (`unix_createtime`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='time测试表'; # 插入数据 insert into tb_time (unix_createtime,create_time) values (UNIX_TIMESTAMP(now()),now()); # 时间戳数字与时间相互转换 select UNIX_TIMESTAMP('2020-05-06 00:00:00') select FROM_UNIXTIME(1588694400)
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!