LOGO Lionel Groulx

Site Web du cours « Programmation de Systèmes »

MySQL Chapitre 3 : Types de données

3.1. Entiers

 

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

 

3.2. Décimaux

3.2.1.NUMERIC et DECIMAL

-              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é


 

3.2.2.FLOAT

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.

3.2.3.REAL et DOUBLE

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. Chaînes de caractères

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

 

3.4. Dates

3.4.1.DATE

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)

3.4.2.TIME

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

3.4.3.DATETIME

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)

3.4.4.TIMESTAMP : un faux ami

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.