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.
- Avons-nous besoin de stocker des nombres négatifs ?
- Quel est le plus grand nombre que nous devrions stocker ?
- Quel est le plus petit nombre quenous devrions stocker ?
- De quelle précision (nombre de chiffres après la virgule) aurons-nous besoin ?
Nom du type | Description | Valeur min | Valeur max | Taille |
TINYINT (MySQL) | Entier très petit | -128 | + 127 | 1 octet |
TINYINT UNSIGNED (MySQL) | Entier positif très petit | 0 | + 255 | 1 octet |
SMALLINT (SQL92) | Entier petit | - 32768 | + 32767 | 2 octets |
INT2 UNSIGNED (SQL92) | Entier positif petit | 0 | + 65535 | 2 octets |
MEDIUMINT (MySQL) | Entier moyen | - 8388608 | + 8388607 | 3 octets |
MEDIUMINT UNSIGNED (MySQL) | Entier positif moyen | 0 | + 16777215 | 3 octets |
INT (SQL92) ou INTEGER | Entier standard | - 2147483648 | + 2147483647 | 4 octets |
INT UNSIGNED (SQL92) | Entier positif standard | 0 | + 4294967295 | 4 octets |
INT4 (PostgreSQL) | Entier standard | - 2147483648 | + 2147483647 | 4 octets |
INT4 UNSIGNED (PostgreSQL) | Entier positif standard | 0 | + 4294967295 | 4 octets |
BIGINT (MySQL) | Entier grand | - 9223372036854775808 | + 9223372036854775807 | 8 octets |
BIGINT UNSIGNED (MySQL) | Entier positif grand | 0 | + 18446744073709551615 | 8 octets |
INT8 (PostgreSQL) | Entier grand | - 9223372036854775808 | + 9223372036854775807 | 8 octets |
INT8 UNSIGNED (PostgreSQL) | Entier positif grand | 0 | + 18446744073709551615 | 8 octets |
FLOAT(X) (SQL92) | Nombre à virgule flottante | de - 3.402823466E+38 | à - 1.175494351E-38 | 4 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écision | de - 1.7976931348623157E+308 | à - 2.2250738585072014E-308 | 8 octets |
et de + 2.2250738585072014E-308 | é + 1.7976931348623157E+308 | |||
DECIMAL, NUMERIC | Décimal sous forme de chaîne | toute valeur de 5 chiffres et 2 décimales | variable |
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
Paramètre | Affichage |
INT | 12 |
INT ZEROFILL | 0000000012 |
INT(4) ZEROFILL | 0012 |
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.
Les types chaînes de caractères SQL92, MySQL, PostgreSQL
Nom du type | Description | Valeurs | Taille |
CHARACTER(X) (SQL92) | Chaîne de caractères fixe | 255 c. max. | 1 octet |
CHAR (PostgreSQL) | Chaîne de caractères fixe | 255 c. max. | 1 octet |
CHAR(X) (PostgreSQL) | Chaîne de caractères fixe | L = X <= 255 complétés par des espaces si nécessaire | 4+X |
CHARACTER VARYING(X) (SQL92) | Chaîne de caractères fixe | L = X <= 255 complétés par des espaces si nécessaire | 4+X |
CHAR(X) (MySQL) | Chaîne de caractères fixe | L = X <= 255 complétés par des espaces si nécessaire | 4+X |
VARCHAR(X) (MySQL 4.0.2) | Chaîne de caractères variable | L <= X <= 255 | L +1 octets, avec L <= X et 1 <= X <= 255 |
VARCHAR(X) (MySQL 5.0.3) | Chaîne de caractères variable | L <= X <= 65535 | L +1 octets, avec L <= X et 1 <= X <= 65535 |
VARCHAR(X) (PostgreSQL) | Chaîne de caractères variable | L <= X <= 255 | L +1 octets, avec L <= X et 1 <= X <= 255 |
TINYBLOB, TINYTEXT (MySQL) | Petite zone de texte | 255c. max. | L +1 octets, avec L < 2^8 |
BLOB, TEXT (MySQL) | Zone de texte standard | 65535c. max. | L +2 octets, avec L < 2^16 |
TEXT (PostgreSQL) | Zone de texte standard | 65535c. max. | L +2 octets, avec L < 2^16 |
MEDIUMBLOB, MEDIUMTEXT (MySQL) | Zone de texte moyenne | 16777215c. max. (16 millions) | L +3 octets, avec L < 2^24 |
LONGBLOB, LONGTEXT (MySQL) | Grande zone de texte | 4294967295c. max. (4 milliards) | L +4 octets, avec L < 2^32 |
ENUM | Une valeur parmi plusieurs | 65535 valeurs max. | 1 ou 2 octets, suivant le nombre d'éléments |
SET | Une ou plusieurs valeurs parmi plusieurs | 64 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.
Les dates SQL92, MySQL, PostgreSQL
Nom du type | Description | Valeur min | Valeur max | Taille |
YEAR (MySQL) | Année (ex: 2024) | 1901 | 2155 | 1 octet |
DATE (MySQL) | Date AAAA-MM-JJ (ex: 2024-12-20) | 1 Janvier 1000 | 31 Décembre 9999 | 3 octets |
DATE (PostgreSQL) | Date AAAA-MM-JJ (ex: 2024-12-20) | 4713 Av.JC | 32767 | 3 octets |
TIME (PostgreSQL) | Heure HH:MM:SS (ex: 18:25:05) | 00h00m00s00 | 23h59m59s99 | 3 octets |
TIME (MySQL) | Heure HH:MM:SS (ex: 18:25:05) | -838h59m59s | 838h59m59s | 3 octets |
TIMESTAMP (MySQL) | AAAAMMJJHHMMSS (ex: 1734715505) | 1 Janvier 1970 00h00m00s | 1465001 | 4 octets |
TIMESTAMP (PostgreSQL) | AAAAMMJJHHMMSS (ex: 1734715505) | 4713 Av.JC | 1465001 | 4 octets |
DATETIME (MySQL) | Date et heure AAAA-MM-JJ HH:MM:SS (ex: 2024-12-20 18:25:05) | 1 Janvier 1000 00h00m00s | 31 Décembre 9999 23h59m59s | 8 octets |
INTERVAL (PostgreSQL) | -178000000 | 178000000 | 12 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-12-20 18:25:05', '24.12.20 18+25+05', '24/12/20 18*25*05', et '24@12@20 18^25^05' sont équivalents. - 'AAAA-MM-JJ' ou 'AA-MM-JJ'.
Syntaxe plus souple : même remarque; '24-12-20', '24.12.20', '24/12/20', et '24@12@20' sont équivalent.
- 'AAAA-MM-JJ HH:MM:SS' ou 'AA-MM-JJ HH:MM:SS'.
- Chaînes sans délimiteurs
- 'AAAAMMJJHHMMSS' ou 'AAMMJJHHMMSS', en supposant qu'une telle chaîne ait un sens en terme de date.
Par exemple '20241220182505', et '241220182505' sont interprétés comme '2024-12-20 18:25:05', mais '20241220189005' 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, '20241220', et '241220' sont interprétés comme '2024-12-20', mais '20243220' est invalide (les mois ne sont pas valides) et devient alors '0000-00-00'.
- 'AAAAMMJJHHMMSS' ou 'AAMMJJHHMMSS', en supposant qu'une telle chaîne ait un sens en terme de date.
- Nombres
- AAAAMMJJHHMMSS ou AAMMJJHHMMSS, en supposant qu'un tel nombre ait un sens en terme de date.
Par exemple, 20241220182505, et 241220182505 sont interprétés comme '2024-12-20 18:25:05'. - Un nombre au format AAAAMMJJ ou AAMMJJ en supposant qu'un tel nombre ait un sens en terme de date.
Par exemple, 20241220, et 241220 sont interprétés comme '2024-12-20'.
- AAAAMMJJHHMMSS ou AAMMJJHHMMSS, en supposant qu'un tel nombre ait un sens en terme de date.
- 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.
Version en cache
20/12/2024 18:25:05 Cette version de la page est en cache (à la date du 20/12/2024 18:25:05) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.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
- 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.