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.

Table des matières 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.

Table des matières Haut

Les dates SQL92, MySQL, PostgreSQL

Nom du typeDescriptionValeur minValeur maxTaille
YEAR (MySQL)Année (ex: 2024)190121551 octet
DATE (MySQL)Date AAAA-MM-JJ
(ex: 2024-03-24)
1 Janvier 100031 Décembre 99993 octets
DATE (PostgreSQL)Date AAAA-MM-JJ
(ex: 2024-03-24)
4713 Av.JC327673 octets
TIME (PostgreSQL)Heure HH:MM:SS
(ex: 19:35:05)
00h00m00s0023h59m59s993 octets
TIME (MySQL)Heure HH:MM:SS
(ex: 19:35:05)
-838h59m59s838h59m59s3 octets
TIMESTAMP (MySQL)AAAAMMJJHHMMSS
(ex: 1711305305)
1 Janvier 1970 00h00m00s14650014 octets
TIMESTAMP (PostgreSQL)AAAAMMJJHHMMSS
(ex: 1711305305)
4713 Av.JC14650014 octets
DATETIME (MySQL)Date et heure AAAA-MM-JJ HH:MM:SS
(ex: 2024-03-24 19:35:05)
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, '24-03-24 19:35:05', '24.03.24 19+35+05', '24/03/24 19*35*05', et '24@03@24 19^35^05' sont équivalents.
    • 'AAAA-MM-JJ' ou 'AA-MM-JJ'.
      Syntaxe plus souple : même remarque; '24-03-24', '24.03.24', '24/03/24', et '24@03@24' 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 '20240324193505', et '240324193505' sont interprétés comme '2024-03-24 19:35:05', mais '20240324199005' 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, '20240324', et '240324' sont interprétés comme '2024-03-24', mais '20243224' 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, 20240324193505, et 240324193505 sont interprétés comme '2024-03-24 19:35:05'.
    • Un nombre au format AAAAMMJJ ou AAMMJJ en supposant qu'un tel nombre ait un sens en terme de date.
      Par exemple, 20240324, et 240324 sont interprétés comme '2024-03-24'.
  • 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.

Document créé le 08/04/2005, dernière modification le 19/03/2024
Source du document imprimé : https://www.gaudry.be/sql-data-types.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.

Références

  1. Consulter le document html Langue du document :uk The MySQL Cluster API Developer Guide : dev.mysql, Column Types (version 20/02/10)

Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.

Table des matières Haut