MySQL Accueil
Chapitres :
MySQL Chapitre 3 : Types de données
type |
Taille |
Minimum |
Maximum |
TINYINT |
1 octet |
-128 |
127 |
SMALLINT |
2 octets |
-32768 |
32767 |
MEDIUMINT |
3 octets |
-8388608 |
8388607 |
INT |
4 octets |
-2147483648 |
2147483647 |
BIGINT |
8 octets |
-9223372036854775808 |
9223372036854775807 |
- En cas de débordement ce sera la valeur la plus proche qui sera stockée (Maximum ou minimum)
- On peut préciser le paramètre UNSIGNED devant la déclaration, ce qui permet de rallonger l’intervalle, mais le limiter du côté positif.
- Ex : UNSIGNED TINYINT sera compris entre 0 et 255
3.1.1. Nombre de chiffres à l’affichage, et attribut ZEROFILL
Pour faciliter les formatages d’affichages, il est possible de préciser le nombre de chiffres MINIMUM désiré à l’affichage.
- Si le nombre possède moins de chiffres que demandé, le caractère de remplissage par défaut est l’espace (rajoutés à gauche)
- On peut remplacer l’espace par des zéros avec l’attribut ZEROFILL
- Ex :
INT (4) ZEROFILL donne
Nombre en mémoire |
Nombre affiché |
45 |
0045 |
4156 |
4156 |
785164 |
785164 |
- NUMERIC et DECIMAL : termes équivalents
Ex : DECIMAL (m,d) :
- m : nombre maximal de chiffres significatifs (sans compter les ZEROS de zerofill)
- d : nombre maximal de chiffres significatifs pour les décimales (APRES la virgule)
Ex : DECIMAL (5,3) peut être :
- compris entre -99.999 et 99.999 (théoriquement) MAIS le bit de signe peut servir à stocker 1 chiffre supplémentaire du côté positif … donc on ne déborde pas avant 999.999.
type |
Minimum |
Maximum théorique |
Maximum réel |
DECIMAL (5,3) |
-99.999. |
99.999 |
999.999 |
Même chose pour le type NUMERIC
Si l’utilisateur présente trop de chiffres après la virgule : un arrondi sera automatiquement effectué
FLOAT stocke un nombre de type flottant, et ne permet pas de faire des comparaisons d’égalité.
Il faut faire attention à ce format : MySQL peut présenter (formater, afficher) les données différemment de celles qu’il conserve en mémoire.
Les FLOAT sont codés sur 4 ou 8 octets selon sa précision.
On peut formater les FLOAT comme des NUMERIC ou DECIMAL avec des nombres de chiffres (m,d)
UNSIGNED FLOAT existe.
Déclarent des nombres flottants double précision.
Tous les deux codés sur 8 octets, équivalents dans MySQL, (*) mais danger pour REAL, car d’autres langages le définissent sur 4 octets.
type |
taille |
minimum |
Maximum |
REAL |
8 octets* |
Idem double |
Idem double |
DOUBLE |
8 octets |
-1.7976931348623157E+308 ; -2.2250738585072014E-308 |
2.2250738585072014E-308 ; 1.7976931348623157E+308 |
On peut formater les REAL, DOUBLE comme des NUMERIC ou DECIMAL avec des nombres de chiffres (m,d)'
UNSIGNED est possible ici aussi
3.3.1.Les chaînes de caractères pas trop longues (<= 255 caractères)
Les types CHAR et VARCHAR sont disponibles. Exemple des différences
texte |
CHAR (5) |
Mémoire en octet |
VARCHAR (5) |
Mémoire en octet |
'' |
' ' |
5 |
'' |
1 |
'tex' |
'tex ' |
5 |
'tex' |
4 |
'texte' |
'texte' |
5 |
'texte' |
6 |
'texte trop long' |
'texte' |
5 |
'texte' |
6 |
Attention donc, CHAR sera intransigeant sur la longueur du contenu, mais consomme toujours autant d’octets. VARCHAR est plus flexible, mais consomme un octet de plus pour marquer la fin de la chaîne. Dans les 2 cas, impossible de dépasser 255 octets.
Note : 1 caractère = 1 octet en ASCII, mais les accents du champ de caractères UTF-8 consomment 2 octets.
3.3.2.Les grandes chaînes de caractères (> 255 caractères)
Les types TEXT
type |
Longueur maxi |
Mémoire occupée |
TINYTEXT |
2^8 octets |
Longueur + 1 |
TEXT |
2^16 octets |
+2 |
MEDIUMTEXT |
2^24 |
+3 |
LONGTEXT |
2^32 |
+4 |
Format standard : (également le format de stockage de MySQL)
'AAAA-MM-JJ'
Autres formats acceptés :
'AAAAMMJJ'
'AAAA/MM/JJ'
'AA+MM+JJ'
'AAAA%MM%JJ'
AAAAMMJJ (format nombre seulement)
AAMMJJ (format nombre seulement)
Fonctionne pour stocker un repère temporel d’heure, ou un délai de temps. Donc non limité à 24h, et peut stocker une valeur négative.
'HH:MM:SS'
'HHH:MM:SS'
'MM:SS'
'J HH:MM:SS'
'HHMMSS'
HHMMSS (format nombre seulement)
type |
minimum |
Maximum |
TIME |
-838 :59 :59 |
838 :59 :59 |
Format standard (également le format de stockage de MySQL):
'AAAA-MM-JJ HH:MM:SS'
Autres formats acceptés :
'AA*MM*JJ HH+MM+SS'
AAAAMMJJHHMMSS (format nombre seulement)
Attention cette commande, qui ressemble à celle connue dans d’autres bases de données ou tableurs, n’a ici pas le même sens.
En effet, normalement, le sens premier de TIMESTAMP est de compter le nombre de secondes depuis le 1er janvier 1970. Ainsi, pour la date '2011-10-04 21 :05 :51', TIMESTAMP vaut 1317755151 (vérifiez dans MS excel)
Cependant, TIMESTAMP pour MySQL a un tout autre sens :
Pour la date ci-dessus, TIMESTAMP sera 20111004210551 soit tous les chiffres collés.
En cas de date erronée, MySQL renvoie tous les champs nuls :
type |
Valeur |
DATE |
'0000-00-00' |
TIME |
'00:00:00' |
DATETIME |
'0000-00-00 00:00:00' |
YEAR |
0000 |
TIMESTAMP |
00000000000000 |
Pour les fonctions liées aux dates et heures, voir le chapitre Fonctions.