Mar 08 2008
En MySQL, nous pouvons spécifier différents types de colonnes (ENUM, chaîne de caractères, etc…). Nous nous intéresserons ici aux types entiers. Il en existe plusieurs. Nous verrons ici la différence entre tous ces types, ainsi que l’utilité souvent méconnue de l’attribut Taille.
Il existe 5 types d’entiers : le tinyint, le smallint, le mediumint, le int et le bigint. La différence entre ces différents types réside en leur encodage. Ils sont respectivement representés par 1, 2, 3, 4 et 8 octets.
Un entier codé sur 1 octet (soit 8 bits) peut prendre 28 = 256 valeurs possibles. Sachant que le signe est codé sur un bit, nous avons donc une plage de valeurs pour le TINYINT de -127 à +127 (soit 255 valeurs possibles, car le bit de poids faible porte le signe, et 20 = 1).
Au cas où nous indiquons un TINYINT non-signé, nous récupérons un octet. Ainsi, on dispose cette fois de toutes les valeurs possibles, de 0 à 255 (soit 256 valeurs).
Je vais mettre fin ici à une idée largement répandue, concernant le sens de l’attribut de taille. Pour les colonnes de type VARCHAR, cela est évident. Il s’agit de la longueur maximale de la chaîne. Cependant, pour les entiers, cela est un peu plus mystérieux. Non, ce n’est pas, comme beaucoup le pensent, le nombre de chiffres maximal que peut compter le nombre (un TINYINT(2) peut être 231, qui contient trois chiffres). Cette taille ne sert que si l’on utilise l’option ZEROFILL, qui permet de compléter avec des zéros jusqu’à obtenir la taille désirée.
Par exemple, considérons un champ SMALLINT(5) avec l’option ZEROFILL activée. Saisissons dans ce champ la valeur 12. Elle sera stockée sous la forme 00012. En revanche, si nous choisissons de saisir un BIGINT(4) de valeur 51461, alors il sera bien affiché 51461. Il n’y a en effet pas besoin de compléter avec des zéros supplémentaires. On dépasse déjà les quatre chiffres.
Petite remarque : 51461 est mon Campus ID, si certains ESIens survolent ce billet… ;)