Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

Base de données : les différents types de champs, exemples avec MySQL

Article posté le 21-01-2015 dans la catégorie SQL

Encore un article sur les règles à suivre pour bien concevoir votre base de données, il faut notamment bien choisir le type de ses données.

A- Les Numériques

Les nombres entiers

Type Nombre d'octets Minimum Maximum
TINYINT 1 -128 127
SMALLINT 2 -32768 32767
MEDIUMINT 3 -8388608 8388607
INT 4 -2147483648 2147483647
BIGINT 8 -9223372036854775808 9223372036854775807

Les paramètres:

Les nombres décimaux

Il existe cinq mots-clés pour stocker des nombres décimaux dans une base de données : DECIMAL, NUMERIC, FLOAT, REAL et DOUBLE.

NUMERIC et DECIMAL

Dans MySQL, ils sont identiques. Ils acceptent deux paramètres 

  1. La précision : il s'agit du nombre de signes significatifs stockés. Les zéros à gauche ne comptant pas, la valeur 0038 comprend donc deux chiffres significatifs : 3 et 8.
  2. L'échelle : il s'agit du nombre de chiffres après la virgule

Exemple: DECIMAL (6,2) permet de stocker 6 chiffres significatifs, dont 2 après la virgule. A noter qu'écrire DECIMAL (6,0) revient à écrire DECIMAL(6)

FLOAT, DOUBLE ET REAL

Ils n'acceptent aucun paramètre, à l'exception de FLOAT (les mêmes que DECIMAL ET NUMERIC, mais ils sont optionnels). FLOAT utilise 4 octets pour le stockage, pareil pour REAL alors que double en utilise 8 lui permettant d'être plus précis. Cependant, MySQL stocke aussi REAL sur 8 octets.

ATTENTION : NUMERIC et DECIMAL stockent les valeurs sous forme de chaine de caractère, c'est donc la valeur exacte qui est enregistrée. Alors que FLOAT, DOUBLE et REAL stockent des nombres, sous une valeur approchée. Donc si vous voulez être précis, par exemple pour gérer votre argent, utilisez NUMERIC ou DECIMAL).

B- Les types texte

CHAR ET VARCHAR

Ces deux-là permettent de stocker jusqu'à 255 caractères, que vous spécifiez en paramètre. La différence se fera au niveau du stockage en mémoire. CHAR(x) stockera toujours x caractères quitte à compléter avec des espaces vides, alors que VARCHAR sotckera jusqu'à x caractères + la taille du texte stocké.

Faites attention, car comme certains charset n'utilisent pas le même espace pour stocker un caractère, cela signfie qu'en fonction de celui choisi, vous ne pourrez pas stocker le même nombre de caractères qu'avec un autre dans un espace donné. Mais pour vous cela ne change rien, un varchar(50) vous permettra toujours de stocker 50 caractères, c'est juste au niveau de la place prise, en octets, que cela va changer.

Faites attention également, car dans le cas où il n'y a pas assez d'espace pour le stocker, votre texte sera tronqué!

TEXT

Si vous souhaitez stocker plus de 255 caractères, il faut vour rabattre sur le type TEXT : 

EDIT : la dernière version de MySQL semble avoir repoussé toutes les limites mentionnées ci-dessus!

Type Longueur Max. Mémoire utilisée
TINYTEXT 2^8 octets Longueur de la chaîne + 1 octet
TEXTE 2^16 Longueur de la chaîne + 2 octets
MEDIUMTEXT 2^24 Longueur de la chaîne + 3 octets
LONGTEXT 2^32 Longueur de la chaîne + 4 octets

C- Chaînes de type binaire

Les chaînes de type binaire permettent de stocker directement les octets sans interpreter ce qu'ils représentent. Cela permet donc de stocker des fichiers comme des images par exemple.

Leur taille et leur utilisation est assez similaire aux CHAR, VARCHAR et TEXT :

Pour rappel, BLOB = Binary Large Object.

D- Le temps

Il existe 5 types temporels avec MySQL

DATE

Il permet de stocker, dans l'ordre, l'année, le mois et le jour. On peut le faire sous différents formats, par exemple :

DATETIME

Même chose que DATE mais avec l'heure en plus. On peut stocker aussi sous différents formats :

TIME

Il permet de stocker une heure précise ou encore un intervalle de temps, sans adaptation (par exemple si vous sotckez 28 heures, vous stockerez bien 28 heures). Là aussi, il existe plusieurs formats :

YEAR

Stocke une année, sur un octet, soit 256 valeurs, donc pour MySQL minimum 1901 et maximum 2155.

TIMESTAMP

En règle générale, le TIMESTAMP d'une date représente le nombre de secondes écoulées depuis le 1er janvier 1970 00:00:00 (UTC) ainsi que la date en question.

Mais dans MySQL, cela ne fait que stocker le DATETIME de la date au format numérique (Le DATETIME le fait au format chaine de caractère).

Exemple : 21 janvier 2015

DATETIME : 2015-01-21 15:28:32

TIMESTAMP 20150121152832

Voilà pour l'essentiel. Un dernier point : pensez à l'évolutivité de votre base! Une anecdote, hors du commun certes, mais parfaite pour illustrer l'idée : Youtube a dû modifier le type de données qui gère le compteur de vue de ses vidéos car l'une d'entre-elles était sur le point d'atteindre la limite du type du champ, sinon le compteur de vue aurait affiché des données incohérentes!

 


Cet article vous a plu? Découvrez d'autres articles


Tweet
comments powered by Disqus