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-11-21) | 1 Janvier 1000 | 31 Décembre 9999 | 3 octets |
DATE (PostgreSQL) | Date AAAA-MM-JJ (ex: 2024-11-21) | 4713 Av.JC | 32767 | 3 octets |
TIME (PostgreSQL) | Heure HH:MM:SS (ex: 11:53:01) | 00h00m00s00 | 23h59m59s99 | 3 octets |
TIME (MySQL) | Heure HH:MM:SS (ex: 11:53:01) | -838h59m59s | 838h59m59s | 3 octets |
TIMESTAMP (MySQL) | AAAAMMJJHHMMSS (ex: 1732186381) | 1 Janvier 1970 00h00m00s | 1465001 | 4 octets |
TIMESTAMP (PostgreSQL) | AAAAMMJJHHMMSS (ex: 1732186381) | 4713 Av.JC | 1465001 | 4 octets |
DATETIME (MySQL) | Date et heure AAAA-MM-JJ HH:MM:SS (ex: 2024-11-21 11:53:01) | 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-11-21 11:53:01', '24.11.21 11+53+01', '24/11/21 11*53*01', et '24@11@21 11^53^01' sont équivalents. - 'AAAA-MM-JJ' ou 'AA-MM-JJ'.
Syntaxe plus souple : même remarque; '24-11-21', '24.11.21', '24/11/21', et '24@11@21' 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 '20241121115301', et '241121115301' sont interprétés comme '2024-11-21 11:53:01', mais '20241121119001' 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, '20241121', et '241121' sont interprétés comme '2024-11-21', mais '20243221' 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, 20241121115301, et 241121115301 sont interprétés comme '2024-11-21 11:53:01'. - Un nombre au format AAAAMMJJ ou AAMMJJ en supposant qu'un tel nombre ait un sens en terme de date.
Par exemple, 20241121, et 241121 sont interprétés comme '2024-11-21'.
- 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.
Nederlandse vertaling
U hebt gevraagd om deze site in het Nederlands te bezoeken. Voor nu wordt alleen de interface vertaald, maar nog niet alle inhoud.Als je me wilt helpen met vertalingen, is je bijdrage welkom. Het enige dat u hoeft te doen, is u op de site registreren en mij een bericht sturen waarin u wordt gevraagd om u toe te voegen aan de groep vertalers, zodat u de gewenste pagina's kunt vertalen. Een link onderaan elke vertaalde pagina geeft aan dat u de vertaler bent en heeft een link naar uw profiel.
Bij voorbaat dank.
Document heeft de 08/04/2005 gemaakt, de laatste keer de 19/03/2024 gewijzigd
Bron van het afgedrukte document:https://www.gaudry.be/nl/sql-data-types.html
De infobrol is een persoonlijke site waarvan de inhoud uitsluitend mijn verantwoordelijkheid is. De tekst is beschikbaar onder CreativeCommons-licentie (BY-NC-SA). Meer info op de gebruiksvoorwaarden en de auteur.
Referenties
- The MySQL Cluster API Developer Guide : dev.mysql,
Column Types
(version 20/02/10)
Deze verwijzingen en links verwijzen naar documenten die geraadpleegd zijn tijdens het schrijven van deze pagina, of die aanvullende informatie kunnen geven, maar de auteurs van deze bronnen kunnen niet verantwoordelijk worden gehouden voor de inhoud van deze pagina.
De auteur Deze site is als enige verantwoordelijk voor de manier waarop de verschillende concepten, en de vrijheden die met de referentiewerken worden genomen, hier worden gepresenteerd. Vergeet niet dat u meerdere broninformatie moet doorgeven om het risico op fouten te verkleinen.