Maison  >  Article  >  base de données  >  Quel type est utilisé pour les dates MySQL ?

Quel type est utilisé pour les dates MySQL ?

青灯夜游
青灯夜游original
2022-06-15 16:49:0824466parcourir

Il existe 5 types : 1. YEAR, utilisé pour représenter l'année, le format est « YYYY » ; 2. TIME, utilisé pour les valeurs qui nécessitent uniquement des informations temporelles, le format est « HH:MM:SS » ; 3. DATE, utilisé Lorsque seules les valeurs de date sont nécessaires, le format est « AAAA-MM-JJ » 4. DATETIME, utilisé pour les valeurs qui doivent contenir à la fois des informations de date et d'heure, le format est « AAAA- » ; MM-DD HH:MM:SS"; 5. TIMESTAMP , similaire à DATETIME, utilisé pour les valeurs qui doivent contenir à la fois des informations de date et d'heure.

Quel type est utilisé pour les dates MySQL ?

L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.

Il existe plusieurs types de données représentant les dates dans MySQL : YEAR, TIME, DATE, DTAETIME, TIMESTAMP.

Tapez le nom Format des dates Plage de dates Exigences de stockage
ANNÉE AAAA 1901 ~ 2155 1 octet
TEMPS HH:MM:SS -838:59:59 ~ 838:59:59 3 octets
DATE AAAA-MM-JJ 1000-01-01 ~ 9999-12-3 3 octets
DATEHEURE AAAA-MM-JJ HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 8 octets
HORODATAGE AAAA-MM-JJ HH:MM:SS 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC 4 octets

Type YEAR

Le type YEAR est un type à un octet utilisé pour représenter l'année, ne nécessitant qu'un seul octet pour le stockage. L'ANNÉE peut être spécifiée dans différents formats, comme suit :

  • ANNÉE exprimée sous forme de chaîne à 4 chiffres ou au format numérique à 4 chiffres, allant de « 1901 » à « 2155 ». Le format d'entrée est 'YYYY' ou YYYY. Par exemple, si vous entrez '2010' ou 2010, les valeurs insérées dans la base de données seront 2010.

  • ANNÉE exprimée sous forme de chaîne à 2 chiffres, allant de « 00 » à « 99 ». Les valeurs comprises entre « 00 » et « 69 » et « 70 » à « 99 » sont converties en valeurs ANNÉE comprises entre 2000 et 2069 et entre 1970 et 1999 respectivement. « 0 » a le même effet que « 00 ». Les valeurs insérées en dehors de la plage seront converties en 2000.

  • ANNÉE exprimée sous la forme d'un nombre à 2 chiffres, allant de 1 à 99. Les valeurs comprises entre 1 et 99 et 70 à 99 sont converties en valeurs ANNÉE comprises entre 2001 et 2069 et 1970 à 1999 respectivement. Notez qu'ici une valeur de 0 sera convertie en 0000 et non en 2000.

Conseil : La plage de nombres entiers à deux chiffres est légèrement différente de la plage de chaînes à deux chiffres. Par exemple, pour insérer l'année 3000, un lecteur peut utiliser le format numérique 0 pour représenter l'ANNÉE, mais en fait, la valeur insérée dans la base de données est 0000 et non 3000 comme prévu. Seuls « 0 » ou « 00 » au format chaîne peuvent être correctement interprétés comme 3000, les valeurs illégales de l'ANNÉE seront converties en 0000.

Type TIME

Le type TIME est utilisé pour les valeurs qui nécessitent uniquement des informations temporelles et nécessitent 3 octets pour le stockage. Le format est HH:MM:SS. HH représente les heures, MM représente les minutes et SS représente les secondes.

La plage de valeurs du type TIME est -838:59:59~838:59:59 La raison pour laquelle la partie heure est si grande est que le type TIME ne peut pas seulement être utilisé pour représenter l'heure d'une journée ( doit être inférieur à 24 heures), mais peut également être un certain temps Le temps écoulé depuis un événement ou le temps entre deux événements (peut être supérieur à 24 heures, voire négatif).

Les valeurs TIME peuvent être spécifiées en utilisant différents formats, comme indiqué ci-dessous.

  • 'D HH:MM:SS' chaîne de format. Ces syntaxes « non strictes » peuvent également être utilisées : 'HH:MM:SS', 'HH:MM', 'D HH' ou 'SS'. D représente ici le jour, qui peut prendre une valeur comprise entre 0 et 34. Lors de l'insertion dans la base de données, D est converti en heures et enregistré au format "D*24+HH".

  • Format 'HHMMSS', une chaîne sans séparateurs, ou une valeur numérique au format HHMMSS, en supposant une heure significative. Par exemple, « 101112 » signifie « 10:11:12 », mais « 106112 » est illégal (il comporte une partie minutes dénuée de sens) et deviendra 00:00:00 une fois stocké.

Astuce : lors de l'attribution de valeurs abrégées à la colonne TIME, veuillez noter : s'il n'y a pas de deux-points, MySQL suppose que les deux chiffres les plus à droite représentent les secondes lors de l'interprétation de la valeur. (MySQL interprète les valeurs TIME comme l'heure passée plutôt que l'heure actuelle). Par exemple, un lecteur pourrait penser que « 1112 » et 1112 signifient 11:12:00 (soit 12 minutes après 11 heures), mais MySQL les interprète comme 00:11:12 (soit 11 minutes et 12 secondes). ). De même, « 12 » et 12 sont interprétés comme 00:00:12. Au contraire, si deux points sont utilisés dans la valeur TIME, ils sont définitivement considérés comme l'heure de la journée, c'est-à-dire que « 11:12 » signifie 11:12:00 et non 00:11:12.

Exemple

Voyons un exemple d'utilisation du type de données dans la table TIME.

Tout d'abord, créez une nouvelle table nommée tests avec quatre colonnes : id, name, start_at et end_at. Le type de données des colonnes start_at et end_at est TIME.

CREATE TABLE tests (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    start_at TIME,
    end_at TIME
);

Deuxièmement, insérez une ligne dans le tableau des tests.

INSERT INTO tests(name,start_at,end_at)
VALUES('Test 1', '08:00:00','10:00:00');

Troisièmement, interrogez les données de la table de tests.

SELECT 
    name, start_at, end_at
FROM
    tests;

Quel type est utilisé pour les dates MySQL ?

Type DATE

Le type DATE est utilisé lorsqu'une seule valeur de date est nécessaire, sans la partie heure, et nécessite 3 octets pour le stockage. Le format de date est « AAAA-MM-JJ », où AAAA représente l'année, MM représente le mois et JJ représente le jour.

Lors de l'attribution de valeurs aux champs de type DATE, vous pouvez utiliser des données de type chaîne ou de type numérique à insérer, à condition qu'elles soient conformes au format de date de DATE. Comme indiqué ci-dessous :

  • La date exprimée au format de caractères « AAAA-MM-JJ » ou « AAAAMMJJ », la plage de valeurs est « 1000-01-01 » ~ « 9999-12-3 ». Par exemple, saisissez « 2015-12-31 » ou « 20151231 » et la date insérée dans la base de données sera le 2015-12-31.

  • 以 'YY-MM-DD' 或者 'YYMMDD' 字符串格式表示日期,在这里YY表示两位的年值。MySQL 解释两位年值的规则:'00~69' 范围的年值转换为 '2000~2069','70~99' 范围的年值转换为 '1970~1999'。例如,输入 '15-12-31',插入数据库的日期为 2015-12-31;输入 '991231',插入数据库的日期为 1999-12-31。

  • 以 YYMMDD 数字格式表示的日期,与前面相似,00~69 范围的年值转换为 2000~2069,80~99 范围的年值转换为 1980~1999。例如,输入 151231,插入数据库的日期为 2015-12-31,输入 991231,插入数据库的日期为 1999-12-31。

  • 使用 CURRENT_DATE 或者 NOW(),插入当前系统日期。

示例

我们来看看下面的例子。

首先,创建一个新表名为people,其中出生日期列为DATE数据类型。

CREATE TABLE people (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    birth_date DATE NOT NULL
);

接下来,在people表中插入一行。

INSERT INTO people(first_name,last_name,birth_date)
VALUES('John','Doe','1990-09-01');

然后,查询数据来自people表。

SELECT 
    first_name, 
    last_name, 
    birth_date
FROM
    people;

Quel type est utilisé pour les dates MySQL ?

之后,使用两位数年份格式将数据插入people表中。

INSERT INTO people(first_name,last_name,birth_date)
VALUES('Jack','Daniel','01-09-01'),
      ('Lily','Bush','80-09-01');

在第一行中,我们使用01(范围00-69)作为年份,因此MySQL将其转换为2001年。在第二行中,我们使用80(范围70-99)作为年份,MySQL将其转换为1980年。

最后,我们可以从people表中查询数据,以检查数据是否已根据转换规则进行转换。

SELECT 
    first_name, 
    last_name, 
    birth_date
FROM
    people;

Quel type est utilisé pour les dates MySQL ?

DATETIME 类型

DATETIME 类型用于需要同时包含日期和时间信息的值,在存储时需要 8 个字节。日期格式为 'YYYY-MM-DD HH:MM:SS',其中 YYYY 表示年,MM 表示月,DD 表示日,HH 表示小时,MM 表示分钟,SS 表示秒。

在给 DATETIME 类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合 DATETIME 的日期格式即可,如下所示。

  • 以 'YYYY-MM-DD HH:MM:SS' 或者 'YYYYMMDDHHMMSS' 字符串格式表示的日期,取值范围为 '1000-01-01 00:00:00'~'9999-12-3 23:59:59'。例如,输入 '2014-12-31 05:05:05' 或者 '20141231050505’,插入数据库的 DATETIME 值都为 2014-12-31 05:05:05。

  • 以 'YY-MM-DD HH:MM:SS' 或者 'YYMMDDHHMMSS' 字符串格式表示的日期,在这里 YY 表示两位的年值。与前面相同,'00~79' 范围的年值转换为 '2000~2079','80~99' 范围的年值转换为 '1980~1999'。例如,输入 '14-12-31 05:05:05',插入数据库的 DATETIME 为 2014-12-31 05:05:05;输入 141231050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05。

  • 以 YYYYMMDDHHMMSS 或者 YYMMDDHHMMSS 数字格式表示的日期和时间。例如,输入 20141231050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05;输入 140505050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05。

DATETIME值可以包括具有YYYY-MM-DD HH:MM:SS[.fraction]例如的格式的尾随小数秒到微秒  2015-12-20 10:01:00.999999。包含小数秒精度时,DATETIME值需要更多存储空间,如下表所示:

分数秒精度 存储 (字节)
0 0
1, 2 1
3, 4 2
5, 6 3

例如,2015-12-20 10:01:00.999999 需要8个字节,5个字节用于2015-12-20 10:01:00 ,3个字节用于.999999 而2015-12-20 10:01:00.9  只需要6个字节,1个字节用于小数秒精度。

TIMESTAMP 类型

TIMESTAMP 的显示格式与 DATETIME 相同,显示宽度固定在 19 个字符,日期格式为 YYYY-MM-DD HH:MM:SS,在存储时需要 4 个字节。但是 TIMESTAMP 列的取值范围小于 DATETIME 的取值范围,为 '1970-01-01 00:00:01'UTC~'2038-01-19 03:14:07'UTC。在插入数据时,要保证在合法的取值范围内。

提示:协调世界时(英:Coordinated Universal Time,法:Temps Universel Coordonné)又称为世界统一时间、世界标准时间、国际协调时间。英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称 UTC。

TIMESTAMP 与 DATETIME 除了存储字节和支持的范围不同外,还有一个最大的区别是:

  • DATETIME 在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;

  • 而 TIMESTAMP 值的存储是以 UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的。

提示:如果为一个 DATETIME 或 TIMESTAMP 对象分配一个 DATE 值,结果值的时间部分被设置为 '00:00:00',因此 DATE 值未包含时间信息。如果为一个 DATE 对象分配一个 DATETIME 或 TIMESTAMP 值,结果值的时间部分被删除,因此DATE 值未包含时间信息。

MySQL TIMESTAMP以UTC值存储。但是,MySQL将DATETIME值存储为没有时区的值。我们来看下面的例子。

首先,将当前连接的时区设置为+00:00。

SET time_zone = '+00:00';

接下来,创建一个表命名timestamp_n_datetime是由两列组成:ts与dt用TIMESTAMP和DATETIME使用下面的语句类型。

CREATE TABLE timestamp_n_datetime (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ts TIMESTAMP,
    dt DATETIME
);

然后,将当前日期和时间插入 timestamp_n_datetime 表的两个ts和每dt列 ,

INSERT INTO timestamp_n_datetime(ts,dt)
VALUES(NOW(),NOW());

之后,从timestamp_n_datetime表中查询数据。

SELECT 
    ts, 
    dt
FROM
    timestamp_n_datetime;

Quel type est utilisé pour les dates MySQL ?

DATETIME和TIMESTAMP列中的值都相同。

最后,将连接的时区设置为+03:00并再次从timestamp_n_datetime表中查询数据。

SET time_zone = '+03:00';
 
SELECT 
    ts, 
    dt
FROM
    timestamp_n_datetime;

Quel type est utilisé pour les dates MySQL ?

如您所见,TIMESTAMP列中的值不同。这是因为当我们更改时区时,TIMESTAMP列以UTC格式存储日期和时间值,根据新时区调整列的值。

这意味着如果您使用TIMESTAMP数据存储日期和时间值,则在将数据库移动到位于不同时区的服务器时应认真考虑。

【相关推荐:mysql视频教程

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn