Maison  >  Article  >  base de données  >  Tutoriel de base de MySQL 2 — Types de données : types de date et d'heure

Tutoriel de base de MySQL 2 — Types de données : types de date et d'heure

黄舟
黄舟original
2017-02-24 10:57:361276parcourir

Les types DATE et heure représentant les valeurs temporelles sont DATETIME, DATE, TIMESTAMP, TIME et YEAR. Chaque type d'heure a une plage de valeurs valides et une valeur "zéro", qui est utilisée lors de la spécification d'une valeur illégale que MySQL ne peut pas représenter. Le type TIMESTAMP possède des fonctionnalités propriétaires de mise à jour automatique, qui seront décrites plus loin.

MySQL donnera un avertissement ou une erreur si vous essayez d'insérer une date illégale. Vous pouvez utiliser le mode SQL ALLOW_INVALID_DATES pour que MySQL accepte certaines dates, telles que « 1999-11-31 ». Utile lorsque vous souhaitez enregistrer une valeur « éventuellement erronée » que l'utilisateur a spécifiée dans la base de données (par exemple, dans un formulaire Web) pour un traitement ultérieur. Dans ce mode, MySQL vérifie uniquement que la plage des mois est comprise entre 0 et 12 et que la plage des jours est comprise entre 0 et 31. Ces plages peuvent inclure zéro car MySQL permet d'enregistrer le jour/mois et les dates où le jour est zéro dans une colonne DATE ou DATETIME. Ceci est utile lorsqu'une application doit enregistrer un anniversaire dont vous ne connaissez pas la date exacte. Dans ce cas, enregistrez simplement la date sous « 1999-00-00 » ou « 1999-01-00 ». Les fonctions qui nécessitent une date complète telles que DATE_SUB() ou DATE_ADD ne donneront pas de résultats corrects si vous enregistrez une telle date. (Si vous ne souhaitez pas que les zéros apparaissent dans les dates, vous pouvez utiliser le mode NO_ZERO_IN_DATESQL).

MySQL permet également d'enregistrer '0000-00-00' comme "pseudo date" (si le mode SQL NO_ZERO_DATE n'est pas utilisé). C'est plus pratique dans certains cas que d'utiliser des valeurs NULL (et les données et index prennent moins de place).

Définissez la variable système sql_mode sur la valeur de mode correspondante pour savoir plus clairement quel type de dates vous souhaitez que MySQL prenne en charge.

Les points suivants doivent être gardés à l'esprit lorsque vous travaillez avec des types de date et d'heure :

· MySQL récupère les valeurs d'un type de date ou d'heure donné dans un format de sortie standard, mais il fait son Il est préférable d'interpréter chaque valeur que vous spécifiez. Un format de valeur d'entrée (par exemple, lorsque vous spécifiez une valeur affectée ou comparée à un type de date ou d'heure). Seuls les formats décrits dans les sections suivantes sont pris en charge. Attendez-vous à ce que vous fournissiez des valeurs valides. Des résultats inattendus peuvent survenir si vous utilisez des valeurs dans d'autres formats.

· Les dates contenant des valeurs d'année à deux chiffres sont ambiguës car le siècle n'est pas connu. MySQL utilise les règles suivantes pour interpréter les valeurs d'année à deux chiffres :

o Les valeurs d'année comprises entre 70 et 99 sont converties en 1970-1999.

o La valeur annuelle comprise entre 00 et 69 est convertie en 2000-2069.

· Bien que MySQL tente d'interpréter les valeurs dans plusieurs formats, les dates sont toujours dans l'ordre année-mois-jour (par exemple, '98-09-04'), plutôt que mois-jour-année comme c'est le cas. couramment utilisé ailleurs ou dans l'ordre jour-mois-année (par exemple, '09-04-98', '04-09-98').

· MySQL convertit automatiquement une valeur de type date ou heure en nombre si la valeur est utilisée dans un contexte numérique, et vice versa.

· Lorsque MySQL rencontre une valeur de type date ou heure hors plage ou illégale pour ce type (comme décrit au début de cette section), il convertit la valeur en valeur "zéro" de cette classe. . Une exception est que les valeurs TIME hors plage sont tronquées au point final correspondant de la plage TIME.

Le tableau suivant montre le format des différentes valeurs "zéro". Veuillez noter que l'utilisation de ces valeurs générera des avertissements si le mode SQL NO_ZERO_DATE est activé.

列类型 ”值
DATETIME '0000-00-00 00:00:00'
DATE '0000-00-00'
TIMESTAMP 00000000000000
TIME '00:00:00'
YEAR 0000

· Les valeurs "zéro" sont spéciales, mais vous pouvez les enregistrer ou les référencer explicitement en utilisant les valeurs indiquées dans le tableau. Vous pouvez également utiliser la valeur « 0 » ou 0 pour enregistrer ou référencer, ce qui est plus facile à écrire.

· Les valeurs de date ou d'heure "zéro" utilisées dans MyODBC sont automatiquement converties en NULL dans MyODBC 2.50.12 et supérieur car ODBC ne peut pas gérer de telles valeurs.

1. Types DATETIME, DATE et TIMESTAMP

  • 1. Attribut TIMESTAMP depuis MySQL 4.1

DATETIME, DATE Lié à le type TIMESTAMP. Cette section décrit leurs caractéristiques, leurs similitudes et leurs différences.

Utilisez le type DATETIME lorsque vous avez besoin d'une valeur contenant à la fois des informations de date et d'heure. MySQL récupère et affiche les valeurs DATETIME au format 'AAAA-MM-JJ HH:MM:SS'. La plage prise en charge va de « 1000-01-01 00:00:00 » à « 9999-12-31 23:59:59 ». ("Supporté" signifie que même si la valeur précédente peut fonctionner, il n'y a aucune garantie).

Le type DATE doit être utilisé lorsque vous n'avez besoin que de la valeur de date sans la partie heure. MySQL récupère et affiche les valeurs DATE au format 'AAAA-MM-JJ'. La plage prise en charge va de « 1000-01-01 » à « 9999-12-31 ».

Les propriétés du type de colonne TIMESTAMP ne sont pas fixes et dépendent de la version de MySQL et du mode SQL dans lequel le serveur s'exécute. Ces propriétés sont décrites plus loin dans cette section.

Les valeurs DATETIME, DATE et TIMESTAMP peuvent être spécifiées en utilisant n'importe quel format courant :

· 'AAAA-MM-JJ HH:MM:SS' ou 'AA-MM-JJ HH : MM:SS 'Formater la chaîne. La syntaxe « détendue » est autorisée : n'importe quel caractère de ponctuation peut être utilisé comme séparateur entre les parties de date ou les parties d'heure. Par exemple, '98-12-31 11:30:45', '98.12.31 11 30 45', '98/12/31 11*30*45' et '98@12@31 11^30^45'. sont équivalents.

· Une chaîne au format 'AAAA-MM-JJ' ou 'AA-MM-JJ'. La syntaxe « détendue » est également autorisée ici. Par exemple, « 98-12-31 », « 98.12.31 », « 98/12/31 » et « 98@12@31 » sont équivalents.

· Une chaîne au format 'AAAAMMJJHHMMSS' ou 'AAMMJJHHMMSS' sans séparateurs, en supposant que la chaîne soit significative pour les types de date. Par exemple, « 19970523091528 » et « 970523091528 » sont interprétés comme « 1997-05-23 09:15:28 », mais « 971122129015 » est illégal (il comporte une partie minutes dénuée de sens) et deviendra « 0000- 00-00 00 ». :00:00'.

· Une chaîne au format 'AAAAMMJJ' ou 'AAMMJJ' sans séparateurs, en supposant que la chaîne soit significative pour les types de date. Par exemple, « 19970523 » et « 970523 » sont interprétés comme « 1997-05-23 », mais « 971332 » est illégal (il a une partie mois et jour sans signification) et deviendra « 0000-00-00 ».

· Un nombre au format AAAAMMJJHHMMSS ou AAMMJJHHMMSS, en supposant que le nombre ait un sens pour le type de date. Par exemple, 19830905132800 et 830905132800 sont interprétés comme « 1983-09-05 13:28:00 ».

· Un nombre au format AAAAMMJJ ou AAMMJJ, en supposant que le nombre ait un sens pour le type de date. Par exemple, 19830905 et 830905 sont interprétés comme « 1983-09-05 ».

· Le résultat renvoyé par la fonction, la valeur est adaptée au contexte DATETIME, DATE ou TIMESTAMP, tel que NOW() ou CURRENT_DATE.

Les valeurs DATETIME, DATE ou TIMESTAMP invalides sont converties en une valeur "zéro" du type correspondant ('0000-00-00 00:00:00', '0000-00-00' ou 00000000000000 ).

Pour les valeurs de chaîne qui incluent des séparateurs de parties de date, il n'est pas nécessaire de spécifier deux chiffres si les valeurs du jour et du mois sont inférieures à 10. « 1979-6-9 » est identique à « 1979-06-09 ». De même, pour les valeurs de chaîne qui incluent des séparateurs de parties horaires, si les valeurs des heures, des minutes et des secondes sont inférieures à 10, il n'est pas nécessaire de spécifier deux chiffres. « 1979-10-30 1:2:3 » est identique à « 1979-10-30 01:02:03 ».

La valeur numérique doit comporter 6, 8, 12 ou 14 chiffres. Si un nombre comporte 8 ou 14 chiffres, il est supposé être au format AAAAMMJJ ou AAAAMMJJHHMMSS, les 4 premiers chiffres représentant l'année. Si le numéro comporte 6 ou 12 chiffres, il est supposé être au format AAMMJJ ou AAMMJJHHMMSS, les 2 premiers chiffres représentant l'année. Les autres nombres sont interprétés comme s'ils étaient complétés par des zéros à la longueur la plus proche.

Les valeurs spécifiées comme chaînes non qualificatives sont interprétées en utilisant la longueur donnée. Si la chaîne comporte 8 ou 14 caractères, les 4 premiers chiffres représentent l’année. Sinon, les 2 premiers chiffres représentent l'année. Interprétez chaque composant apparaissant dans la chaîne de gauche à droite pour découvrir les valeurs de l'année, du mois, du jour, de l'heure, des minutes et des secondes. Cela indique que les chaînes de moins de 6 caractères ne doivent pas être utilisées. Par exemple, si vous spécifiez « 9903 » en pensant que cela signifie mars 1999, MySQL insérera une valeur de date « zéro » dans votre table. En effet, les valeurs de l'année et du mois sont 99 et 03, mais la partie jour est complètement manquante, donc la valeur n'est pas une date légale. Cependant, vous pouvez spécifier explicitement une valeur zéro pour représenter la partie du mois ou du jour manquante. Par exemple, vous pouvez utiliser « 990300 » pour insérer la valeur « 1999-03-00 ».

Dans une certaine mesure, il est possible d'attribuer une valeur d'un type de date à un type de date différent. Cependant, la valeur peut changer ou perdre certaines informations :

· Si vous attribuez une valeur DATE à un objet DATETIME ou TIMESTAMP, la partie heure de la valeur résultante est définie sur « 00:00:00 » en raison de la valeur DATE Aucune information temporelle incluse.

· Si vous attribuez une valeur DATETIME ou TIMESTAMP à un objet DATE, la partie heure de la valeur résultante est supprimée car la valeur DATE ne contient pas d'informations temporelles.

· N'oubliez pas que bien que les valeurs DATETIME, DATE et TIMESTAMP puissent être spécifiées en utilisant le même format, les plages pour les différents types de valeurs sont différentes. Par exemple, une valeur TIMESTAMP ne peut pas être antérieure à 1970 ni postérieure à 2037. Cela indique qu'une date, telle que « 1968-01-01 », bien que valide pour les valeurs DATETIME ou DATE, n'est pas valide pour les valeurs TIMESTAMP et sera convertie en 0 si elle est attribuée à un tel objet.

Soyez conscient de certains pièges lors de la spécification de valeurs de date :

· Le format non strict autorisé pour les valeurs spécifiées sous forme de chaînes peut être trompeur. Par exemple, la valeur « 10:11:12 » peut ressembler à une valeur temporelle en raison du séparateur « : », mais si elle est utilisée dans un contexte de date, la valeur est interprétée comme l'année « 2010-11-12 ». La valeur « 10:45:15 » est convertie en « 0000-00-00 » car « 45 » n'est pas un mois légal.

· En ​​mode non strict, le serveur MySQL effectue uniquement des contrôles de base sur la validité des dates : les plages d'année, de mois et de jour sont respectivement de 1000 à 9999, de 00 à 12 et de 00 à 31. Toute date contenant des parties en dehors de ces plages est convertie en « 0000-00-00 ». Notez que vous êtes toujours autorisé à enregistrer des dates illégales, telles que « 2002-04-31 ». Pour vous assurer que les dates sont valides lorsque vous n'utilisez pas le mode strict, vous devez vérifier votre candidature.

En mode strict, les dates illégales ne sont pas acceptées et ne sont pas converties.

· Les dates contenant des valeurs d'année à deux chiffres sont ambiguës car le siècle n'est pas connu. MySQL utilise les règles suivantes pour interpréter les valeurs d'année à deux chiffres :

o Les valeurs d'année comprises entre 00 et 69 sont converties en 2000-2069.

o Les valeurs annuelles comprises entre 70 et 99 sont converties en 1970-1999.

1.1. Attributs TIMESTAMP depuis MySQL 4.1

Remarque : Dans les anciennes versions de MySQL (antérieures à 4.1), les attributs du type de colonne TIMESTAMP différaient à bien des égards de Ceci est très différent de ce qui est décrit dans la section. Si vous devez convertir d'anciennes données TIMESTAMP pour fonctionner dans MySQL 5.1, veuillez consulter le Manuel de référence MySQL 4.1 pour plus de détails.

Le format d'affichage de la colonne TIMESTAMP est le même que celui de la colonne DATETIME. Autrement dit, la largeur d'affichage est fixée à 19 caractères, et le format est AAAA-MM-JJ HH:MM:SS.

Le serveur MySQL peut également fonctionner en mode MAXDB. Lorsque le serveur fonctionne dans ce mode, TIMESTAMP est égal à DATETIME. Autrement dit, si le serveur s'exécute en mode MAXDB lors de la création de la table, la colonne TIMESTAMP est créée en tant que colonne DATETIME. Le résultat est que la colonne utilise le format d'affichage DATETIME, a la même plage de valeurs et n'est pas automatiquement initialisée ou mise à jour avec la date et l'heure actuelles.

Pour activer le mode MAXDB, utilisez l'option de serveur --sql-mode=MAXDB lors du démarrage du serveur ou définissez le mode du serveur SQL sur MAXDB au moment de l'exécution en définissant la variable globale sql_mode :

mysql> SET GLOBAL sql_mode=MAXDB;

Le client peut faire exécuter le serveur en mode MAXDB pour sa connexion comme suit :

mysql> SET SESSION sql_mode=MAXDB;

MySQL n'accepte pas les valeurs d'horodatage qui incluent un zéro dans la colonne jour ou mois ou contiennent des valeurs de date illégales . La seule exception à cette règle est la valeur spéciale « 0000-00-00 00:00:00 ».

Vous pouvez déterminer de manière très flexible quand initialiser et mettre à jour TIMESTAMP et quelles colonnes initialiser et mettre à jour :

· Vous pouvez spécifier l'horodatage actuel comme valeur par défaut et valeur automatiquement mise à jour. Mais vous ne pouvez en choisir qu’un, ou aucun des deux. (Il n'est pas possible qu'une colonne sélectionne un comportement et qu'une autre colonne sélectionne un autre comportement).

· Vous pouvez spécifier quelle colonne TIMESTAMP est automatiquement initialisée ou mise à jour à la date et à l'heure actuelles. La 1ère colonne TIMESTAMP n'est plus nécessaire.

Veuillez noter que les informations décrites ci-dessous s'appliquent uniquement aux colonnes TIMESTAMP dans les tables créées sans le mode MAXDB activé. (Comme mentionné ci-dessus, le mode MAXDB entraîne la création de colonnes en tant que colonnes DATETIME). Les règles qui contrôlent l'initialisation et la mise à jour des colonnes TIMESTAMP sont les suivantes :

· Si la première colonne TIMESTAMP d'une table est spécifiée comme valeur DEFAULT, elle ne peut pas être ignorée. La valeur par défaut peut être CURRENT_TIMESTAMP ou une valeur de date et d'heure constante.

· DEFAULT NULL est identique à DEFAULT CURRENT_TIMESTAMP de la première colonne TIMESTAMP. Pour les autres colonnes TIMESTAMP, DEFAULT NULL est traité comme DEFAULT 0.

· N'importe quelle colonne TIMESTAMP du tableau peut être définie pour s'initialiser automatiquement avec l'horodatage actuel et/ou la mise à jour.

· Dans l'instruction CREATE TABLE, vous pouvez déclarer la première colonne TIMESTAMP de l'une des manières suivantes :

o Utilisez les clauses DEFAULT CURRENT_TIMESTAMP et ON UPDATE CURRENT_TIMESTAMP pour utiliser la valeur par défaut. horodatage actuel et mis à jour automatiquement.

o N'utilise pas la clause DEFAULT ou ON UPDATE, identique à DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMP.

o Utilisez la clause DEFAULT CURRENT_TIMESTAMP au lieu de la clause ON UPDATE. La valeur par défaut utilise l'horodatage actuel mais ne se met pas à jour automatiquement.

o Sans la clause DEFAULT mais avec la clause ON UPDATE CURRENT_TIMESTAMP, la colonne a une valeur par défaut de 0 et est automatiquement mise à jour.

o        用常量DEFAULT值,列有给出的 默认值。如果列有一个ON UPDATE CURRENT_TIMESTAMP子句,它自动更新,否则不。

换句话说,你可以为初始值和自动更新的值使用当前的时间戳,或者其中一个使用,或者两个皆不使用。(例如,你可以指定ON UPDATE来启用自动更新而不让列自动初始化)。

· 在DEFAULT和ON UPDATE子句中可以使用CURRENT_TIMESTAMP、CURRENT_TIMESTAMP()或者NOW()。它们均具有相同的效果。

两个属性的顺序并不重要。如果一个TIMESTAMP列同时指定了DEFAULT和ON UPDATE,任何一个可以在另一个的前面。

例子,下面这些语句是等效的:

CREATE TABLE t (ts TIMESTAMP);
CREATE TABLE t (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                             ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t (ts TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
                             DEFAULT CURRENT_TIMESTAMP);

· 要为TIMESTAMP列而不是第1列指定自动默认或更新,必须通过将第1个TIMESTAMP列显式分配一个常量DEFAULT值来禁用自动初始化和更新。(例如,DEFAULT 0或DEFAULT'2003-01-01 00:00:00')。然后,对于其它TIMESTAMP列,规则与第1个TIMESTAMP列相同,例外情况是不能忽略DEFAULT和ON UPDATE子句。如果这样做,则不会自动进行初始化或更新。

例如:下面这些语句是等效的:

CREATE TABLE t (
    ts1 TIMESTAMP DEFAULT 0,
    ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                  ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t (
    ts1 TIMESTAMP DEFAULT 0,
    ts2 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
                  DEFAULT CURRENT_TIMESTAMP);

可以对每个连接设置当前的时区。TIMESTAMP值以UTC格式保存,存储时对当前的时区进行转换,检索时再转换回当前的时区。只要时区设定值为常量,便可以得到保存时的值。如果保存一个TIMESTAMP值,应更改时区然后检索该值,它与你保存的值不同。这是因为在两个方向的转换中没有使用相同的时区。当前的时区可以用作time_zone系统变量的值。

可以在TIMESTAMP列的定义中包括NULL属性以允许列包含NULL值。例如:

CREATE TABLE t
(
  ts1 TIMESTAMP NULL DEFAULT NULL,
  ts2 TIMESTAMP NULL DEFAULT 0,
  ts3 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
);

如果未指定NULL属性,将列设置为NULL设置则会将它设置为当前的时间戳。请注意允许NULL值的TIMESTAMP列不会采用当前的时间戳,除非要么其 默认值定义为CURRENT_TIMESTAMP,或者NOW()或CURRENT_TIMESTAMP被插入到该列内。换句话说,只有使用如下定义创建,定义为 NULL的TIMESTAMP列才会自动更新:

CREATE TABLE t (ts NULLDEFAULT CURRENT_TIMESTAMP);

否则-也就是说,如果使用NULL而不是DEFAULT TIMESTAMP来定义TIMESTAMP列,如下所示...

CREATE TABLE t1 (ts NULL DEFAULT NULL);
CREATE TABLE t2 (ts NULL DEFAULT '0000-00-00 00:00:00');

...则必须显式插入一个对应当前日期和时间的值。例如:

INSERT INTO t1 VALUES (NOW());
INSERT INTO t2 VALUES (CURRENT_TIMESTAMP);

2. TIME类型

MySQL以'HH:MM:SS'格式检索和显示TIME值(或对于大的小时值采用'HHH:MM:SS'格式)。TIME值的范围可以从'-838:59:59'到'838:59:59'。小时部分会因此大的原因是TIME类型不仅可以用于表示一天的时间(必须小于24小时),还可能为某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,或者甚至为负)。

你可以用各种格式指定TIME值:

· 'D HH:MM:SS.fraction'格式的字符串。还可以使用下面任何一种“非严格”语法:'HH:MM:SS.fraction'、'HH:MM:SS'、'HH:MM'、'D HH:MM:SS'、'D HH:MM'、'D HH'或'SS'。这里D表示日,可以取0到34之间的值。请注意MySQL还不保存分数。

· 'HHMMSS'格式的没有间割符的字符串,假定是有意义的时间。例如,'101112'被理解为'10:11:12',但'109712'是不合法的(它有一个没有意义的分钟部分),将变为'00:00:00'。

· HHMMSS格式的数值,假定是有意义的时间。例如,101112被理解为'10:11:12'。下面格式也可以理解:SS、MMSS、HHMMSS、HHMMSS.fraction。请注意MySQL还不保存分数。

· 函数返回的结果,其值适合TIME上下文,例如CURRENT_TIME。

对于指定为包括时间部分间割符的字符串的TIME值,如果时、分或者秒值小于10,则不需要指定两位数。'8:3:2'与'08:03:02'相同。

为TIME列分配简写值时应注意。没有冒号,MySQL解释值时假定最右边的两位表示秒。(MySQL解释TIME值为过去的时间而不是当天的时间)。例如,你可能认为'1112'和1112表示'11:12:00'(11点过12分),但MySQL将它们解释为'00:11:12'(11分,12 秒)。同样,'12'和12 被解释为 '00:00:12'。相反,TIME值中使用冒号则肯定被看作当天的时间。也就是说,'11:12'表示'11:12:00',而不是'00:11:12'。

超出TIME范围但合法的值被裁为范围最接近的端点。例如,'-850:00:00'和'850:00:00'被转换为'-838:59:59'和'838:59:59'。

无效TIME值被转换为'00:00:00'。请注意由于'00:00:00'本身是一个合法TIME值,只从表内保存的一个'00:00:00'值还不能说出原来的值是 '00:00:00'还是不合法的值。

3. Type ANNÉE

Le type ANNÉE est un type à un octet utilisé pour représenter l'année.

MySQL récupère et affiche les valeurs de l'ANNÉE au format AAAA. La plage va de 1901 à 2155.

Vous pouvez spécifier les valeurs de l'ANNÉE dans différents formats :

· Chaîne à quatre chiffres, allant de « 1901 » à « 2155 ».

· Quatre chiffres, allant de 1901 à 2155.

· Chaîne à deux 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.

· Entier à deux chiffres compris entre 1 et 99. Les valeurs comprises entre 1 et 69 et entre 70 et 99 sont converties en valeurs ANNÉE comprises entre 2001 et 2069 et entre 1970 et 1999. Notez que les plages d'entiers à deux chiffres sont légèrement différentes des plages de chaînes à deux chiffres dans la mesure où vous ne pouvez pas spécifier directement zéro sous forme de nombre et le faire interpréter comme 2000. Vous devez le spécifier sous la forme d'une chaîne « 0 » ou « 00 », sinon il sera interprété comme 0000.

· Le résultat renvoyé par la fonction, dont la valeur est appropriée pour le contexte YEAR, comme NOW().

Les valeurs ANNÉE illégales sont converties en 0000.

4. Questions liées à l'an 2000 et types de dates

MySQL lui-même est sûr pour l'an 2000 (Y2K), mais les valeurs saisies dans MySQL peuvent ne pas être sûres. Toute entrée contenant une valeur d'année à deux chiffres sera ambiguë car le siècle n'est pas connu. Ces valeurs doivent être interprétées comme quatre chiffres car MySQL utilise quatre chiffres en interne pour stocker l'année.

Pour les types DATETIME, DATE, TIMESTAMP et YEAR, MySQL utilise les règles suivantes pour interpréter les dates avec des valeurs d'année ambiguës :

· Les valeurs d'année comprises entre 00 et 69 sont converties à 2000-2069.

· Les valeurs annuelles comprises entre 70 et 99 sont converties en 1970-1999.

N'oubliez pas que ces règles ne sont que des suppositions raisonnables sur ce que représentent les valeurs des données. Si l'heuristique utilisée par MySQL ne produit pas la valeur correcte, vous devez fournir l'entrée exacte contenant la valeur de l'année à quatre chiffres.

ORDER BY peut trier correctement les valeurs TIMESTAMP ou YEAR avec deux chiffres de l'année.

Certaines fonctions telles que MIN() et MAX() convertissent TIMESTAMP ou YEAR en nombre. Cela signifie que ces fonctions ne fonctionnent pas correctement avec des valeurs comportant des valeurs annuelles à deux chiffres. Le correctif dans ce cas consiste à convertir TIMESTAMP ou YEAR au format année à quatre chiffres ou à utiliser MIN(DATE_ADD(TIMESTAMP,INTERVAL 0 DAYS)).

Ce qui précède est le contenu du didacticiel de base MySQL 2 - types de date et d'heure des types de données. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


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