Types de données SQL92, MySQL, PostgreSQL

Les types numériques SQL92, MySQL, PostgreSQL

SQL92, MySQL, PostgreSQL permettent l'utilisation d'un grand nombre de types numériques. Selon les valeurs possibles que nous risquons de retrouver dans notre champ de base de données, nous préférerons tel ou tel type, mais à chaque fois en tentant d'utiliser le type qui nécessite le moins de place.

  1. Avons-nous besoin de stocker des nombres négatifs ?
  2. Quel est le plus grand nombre que nous devrions stocker ?
  3. Quel est le plus petit nombre quenous devrions stocker ?
  4. De quelle précision (nombre de chiffres après la virgule) aurons-nous besoin ?
Nom du typeDescriptionValeur minValeur maxTaille
TINYINT (MySQL)Entier très petit-128+ 1271 octet
TINYINT UNSIGNED (MySQL)Entier positif très petit0+ 2551 octet
SMALLINT (SQL92)Entier petit- 32768 + 327672 octets
INT2 UNSIGNED (SQL92)Entier positif petit 0 + 655352 octets
MEDIUMINT (MySQL)Entier moyen- 8388608+ 83886073 octets
MEDIUMINT UNSIGNED (MySQL)Entier positif moyen0+ 167772153 octets
INT (SQL92)
ou INTEGER
Entier standard- 2147483648+ 21474836474 octets
INT UNSIGNED (SQL92)Entier positif standard0+ 42949672954 octets
INT4 (PostgreSQL)Entier standard- 2147483648+ 21474836474 octets
INT4 UNSIGNED (PostgreSQL)Entier positif standard0+ 42949672954 octets
BIGINT (MySQL)Entier grand- 9223372036854775808+ 92233720368547758078 octets
BIGINT UNSIGNED (MySQL)Entier positif grand0+ 184467440737095516158 octets
INT8 (PostgreSQL)Entier grand- 9223372036854775808+ 92233720368547758078 octets
INT8 UNSIGNED (PostgreSQL)Entier positif grand0+ 184467440737095516158 octets
FLOAT(X) (SQL92)Nombre à virgule flottantede - 3.402823466E+38à - 1.175494351E-384 octets
ou
8 octets
Remarque : les valeurs entre -1.175494351E-38 et +1.175494351E-38 ne sont pas possibles, car il existe deux zones de part et d'autre de la valeur zéro que nous ne pouvons représenter.
et de + 1.175494351E-38à + 3.402823466E+38
Par défaut, taille de 4 octets (X est dans l'intervalle 0 à 24), mais 2 paramétres optionnels peuvent renseigner la taille de l'affichage, et le nombre de décimales.
X peut valoir <=24 pour une précision simple, et entre 25 et 53 pour une précision double. Si UNSIGNED est spécifié, les valeurs négatives sont interdites.
DOUBLE, REAL (SQL92)Décimal de double précisionde - 1.7976931348623157E+308à - 2.2250738585072014E-3088 octets
et de + 2.2250738585072014E-308é + 1.7976931348623157E+308
DECIMAL, NUMERICDécimal sous forme de chaînetoute valeur de 5 chiffres et 2 décimalesvariable

Dépassement de valeur

Lorsque MySQL doit stocker une valeur qui est hors de l'intervalle de validité d'une colonne, il ramène la valeur à la plus proche possible, et stocke cette valeur. Par exemple, l'intervalle de validité d'une colonne d'entiers INT va de -2147483648 à 2147483647. Si vous essayez d'insérer -9999999999 dans une colonne de ce type, la valeur sera ramenée à la plus proche possible, c'est à dire -2147483648. De même, si vous essayez d'insérer 9999999999, 2147483647 sera stocké à la place.

Autres termes de MySQL

BIT, BOOL, BOOLEAN

Ce sont des synonymes de TINYINT(1). Le synonyme BOOLEAN a été ajouté en version 4.1.0

DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL]

Ce sont des synonymes pour DOUBLE.

Affichage

Ajout de paramètres 
ParamètreAffichage
INT12
INT ZEROFILL0000000012
INT(4) ZEROFILL0012

Dépassement de valeur

Si nous spécifions l'option ZEROFILL pour une valeur numérique, MySQL va automatiquement ajouter l'attribut UNSIGNED à la colonne.

Contents Haut

Les types chaînes de caractères SQL92, MySQL, PostgreSQL

Nom du typeDescriptionValeursTaille
CHARACTER(X) (SQL92)Chaîne de caractères fixe255 c. max.1 octet
CHAR (PostgreSQL)Chaîne de caractères fixe255 c. max.1 octet
CHAR(X) (PostgreSQL)Chaîne de caractères fixeL = X <= 255 complétés par des espaces si nécessaire4+X
CHARACTER VARYING(X) (SQL92)Chaîne de caractères fixeL = X <= 255 complétés par des espaces si nécessaire4+X
CHAR(X) (MySQL)Chaîne de caractères fixeL = X <= 255 complétés par des espaces si nécessaire4+X
VARCHAR(X) (MySQL 4.0.2)Chaîne de caractères variableL <= X <= 255 L +1 octets, avec L <= X et 1 <= X <= 255
VARCHAR(X) (MySQL 5.0.3)Chaîne de caractères variableL <= X <= 65535 L +1 octets, avec L <= X et 1 <= X <= 65535
VARCHAR(X) (PostgreSQL)Chaîne de caractères variableL <= X <= 255 L +1 octets, avec L <= X et 1 <= X <= 255
TINYBLOB, TINYTEXT (MySQL)Petite zone de texte255c. max. L +1 octets, avec L < 2^8
BLOB, TEXT (MySQL)Zone de texte standard65535c. max. L +2 octets, avec L < 2^16
TEXT (PostgreSQL)Zone de texte standard65535c. max. L +2 octets, avec L < 2^16
MEDIUMBLOB, MEDIUMTEXT (MySQL)Zone de texte moyenne16777215c. max. (16 millions) L +3 octets, avec L < 2^24
LONGBLOB, LONGTEXT (MySQL)Grande zone de texte4294967295c. max. (4 milliards) L +4 octets, avec L < 2^32
ENUMUne valeur parmi plusieurs65535 valeurs max. 1 ou 2 octets, suivant le nombre d'éléments
SETUne ou plusieurs valeurs parmi plusieurs64 valeurs max. 1, 2, 3, 4 ou 8 octets, suivant le nombre de membres de l'ensemble

Les types VARCHAR, BLOB et TEXT sont de longueur variable, et l'espace disque requis dépend de la taille réelle de la valeur présente dans la colonne, et non pas de la taille maximale de la colonne.

Différences entre BLOB et TEXT

Pour stocker des chaînes de caractères, les seules différences entre les colonnes de type BLOB et celles de type TEXT se situent aux niveaux des encodages : BLOB est de type binaire (sensible à la casse) alors que TEXT est de type ASCII (permet de rendre insensible à la casse). Les tris, faits sur les BLOB, contrairement à ceux faits sur les TEXT, tiennent compte de la casse.

L'avantage d'un champ BLOB est que nous pouvons stocker n'importe quoi (une image, un document PDF, etc.).

Différences entre CHAR et VARCHAR

Quand une valeur CHAR est enregistrée, elle est complétée à droite avec des espaces jusqu'à atteindre la valeur fixée. Quand une valeur de CHAR est lue, les espaces en trop sont retirés.

Les valeurs contenues dans les colonnes de type VARCHAR sont de tailles variables. Nous pouvons déclarer une colonne VARCHAR pour que sa taille soit comprise entre 1 et 255, exactement comme pour les colonnes CHAR. Par contre, contrairement à CHAR, les valeurs de VARCHAR sont stockées en utilisant autant de caractères que nécessaire, plus un octet pour mémoriser la longueur. Les valeurs ne sont pas complétées. Au contraire, les espaces finaux sont supprimés avant stockage.

L'attribut BINARY signifie que les valeurs sont classées et triées en tenant compte de la casse, suivant l'ordre des caractères ASCII de la machine ou est installé le serveur MySQL. BINARY n'affecte pas les méthodes de lecture et de stockage des valeurs.

Dépassement du nombre de caractères maximum

Si nous assignons une valeur trop grande à une colonne de type CHAR, VARCHAR, BLOB ou TEXT, la valeur sera tronquée à la taille maximale possible.

Contents Haut

Les dates SQL92, MySQL, PostgreSQL

Nom du typeDescriptionValeur minValeur maxTaille
YEAR (MySQL)Année (ex: 2019)190121551 octet
DATE (MySQL)Date AAAA-MM-JJ
(ex: 2019-11-15)
1 Janvier 100031 Décembre 99993 octets
DATE (PostgreSQL)Date AAAA-MM-JJ
(ex: 2019-11-15)
4713 Av.JC327673 octets
TIME (PostgreSQL)Heure HH:MM:SS
(ex: 17:30:14)
00h00m00s0023h59m59s993 octets
TIME (MySQL)Heure HH:MM:SS
(ex: 17:30:14)
-838h59m59s838h59m59s3 octets
TIMESTAMP (MySQL)AAAAMMJJHHMMSS
(ex: 1573835414)
1 Janvier 1970 00h00m00s14650014 octets
TIMESTAMP (PostgreSQL)AAAAMMJJHHMMSS
(ex: 1573835414)
4713 Av.JC14650014 octets
DATETIME (MySQL)Date et heure AAAA-MM-JJ HH:MM:SS
(ex: 2019-11-15 17:30:14)
1 Janvier 1000 00h00m00s31 Décembre 9999 23h59m59s8 octets
INTERVAL (PostgreSQL)-17800000017800000012 octets

Formats de dates

Pour les champs DATE, DATETIME et TIMESTAMP nous pouvons spécifier les formats suivants :

  • Chaînes avec délimiteurs
    • 'AAAA-MM-JJ HH:MM:SS' ou 'AA-MM-JJ HH:MM:SS'.
      Syntaxe plus souple : tout caractère de ponctuation peut être utilisé comme délimiteur entre les parties de temps.
      Par exemple, '19-11-15 17:30:14', '19.11.15 17+30+14', '19/11/15 17*30*14', et '19@11@15 17^30^14' sont équivalents.
    • 'AAAA-MM-JJ' ou 'AA-MM-JJ'.
      Syntaxe plus souple : même remarque; '19-11-15', '19.11.15', '19/11/15', et '19@11@15' sont équivalent.
  • Chaînes sans délimiteurs
    • 'AAAAMMJJHHMMSS' ou 'AAMMJJHHMMSS', en supposant qu'une telle chaîne ait un sens en terme de date.
      Par exemple '20191115173014', et '191115173014' sont interprétés comme '2019-11-15 17:30:14', mais '20191115179014' est invalide (les minutes ne sont pas valides) et devient alors '0000-00-00 00:00:00'.
    • 'AAAAMMJJ' ou 'AAMMJJ', en supposant qu'une telle chaîne ait un sens en terme de date.
      Par exemple, '20191115', et '191115' sont interprétés comme '2019-11-15', mais '20193215' est invalide (les mois ne sont pas valides) et devient alors '0000-00-00'.
  • Nombres
    • AAAAMMJJHHMMSS ou AAMMJJHHMMSS, en supposant qu'un tel nombre ait un sens en terme de date.
      Par exemple, 20191115173014, et 191115173014 sont interprétés comme '2019-11-15 17:30:14'.
    • Un nombre au format AAAAMMJJ ou AAMMJJ en supposant qu'un tel nombre ait un sens en terme de date.
      Par exemple, 20191115, et 191115 sont interprétés comme '2019-11-15'.
  • Un résultat de fonction qui retourne une valeur acceptable dans un champ de type DATETIME, DATE, ou TIMESTAMP, tels que NOW() ou CURRENT_DATE.

Les valeurs spécifiées sous forme de nombres doivent avoir 6, 8, 12, ou 14 chiffres de long. Si le nombre a 8 ou 14 chiffres, MySQL suppose que le format est AAAAMMJJ ou AAAAMMJJHHMMSS (respectivement) et que l'année est représentées par les 4 premiers chiffres. Si le nombre a 6 ou 12 chiffres, MySQL suppose que le format est AAMMJJ ou AAMMJJHHMMSS (respectivement) et format et que l'année est représentées par les 2 premiers chiffres. Les nombres qui ne sont pas d'une taille valide, sont complétés avec des 0 jusqu'à la taille lisible la plus proche.

Timestanp

Pour plus d'informations sur la gestion du timestamp, vous pouvez consulter la page consacrée aux conversions entre les formats timestamp et date en PHP.
De plus, un outil de conversion en ligne y est présent.

Contents Haut

English translation

You have asked to visit this site in English. For now, only the interface is translated, but not all the content yet.

If you want to help me in translations, your contribution is welcome. All you need to do is register on the site, and send me a message asking me to add you to the group of translators, which will give you the opportunity to translate the pages you want. A link at the bottom of each translated page indicates that you are the translator, and has a link to your profile.

Thank you in advance.

Document created the 08/04/2005, last modified the 31/10/2018
Source of the printed document:https://www.gaudry.be/en/sql-data-types.html

The infobrol is a personal site whose content is my sole responsibility. The text is available under CreativeCommons license (BY-NC-SA). More info on the terms of use and the author.

References

  1. View the nbsp;document Language of the document:uk The MySQL Cluster API Developer Guide : dev.mysql, Column Types (version 20/02/10)

These references and links indicate documents consulted during the writing of this page, or which may provide additional information, but the authors of these sources can not be held responsible for the content of this page.
The author This site is solely responsible for the way in which the various concepts, and the freedoms that are taken with the reference works, are presented here. Remember that you must cross multiple source information to reduce the risk of errors.

Contents Haut