Les types de données

Liste complètes des types
Taille des types
Limite du nombre de colonnes et taille des n-upplets


Null

Tout type de données peut prendre la valeur nulle si le schema l’autorise.

Format

Les valeurs nulles sont: NULL, null et \N.

SELECT NULL;
SELECT null;
SELECT \N;

Nombres

Types

Type Description Minmax signé Non signé
tinyint Entier sur 1 octet -128;127 0;255
smallint Entier sur 2 octets -32768;32767 0;65535
mediumint Entier sur 3 octets -8388608;8388607 0;16777215
int Entier sur 4 octets -2147483648;2147483647 0;4294967295
numeric(n,d) Réel (nombre de chiffres, précision)   (5,2): -999.99;999.99 (5,2): 0;999.99

Signe

Un nombre peut être signé ou non.
Par défaut, les nombres sont signés (ils peuvent être positifs ou négatifs). Il est possible de préciser que le nombre est non signé (uniquement positif), ce qui permet d’insérer des nombres plus grands :

type UNSIGNED

Taille maximale

On peut préciser la taille maximale de la valeur

type(largeur max)

Par exemple, tinyint(1) est un entier sur un chiffre (0 à 9).

La taille maximale de la donnée est indépendante de son poids en mémoire : int(1) prendra 4 octets en mémoire même si un seul octet est utilisé. Par contre, MySQL effectuera des vérifications à l’insertion / modification des données: si la taille de la valeur est supérieure à la taille maximale, alors une erreur est retournée — Data too long for column 'first_name' at row 1.

Format

Les décimales sont marquées par le point ..

SELECT 1;
SELECT .2;
SELECT 3.4;
SELECT -5;
SELECT -6.78;
SELECT +9.10;

La notation scientification est acceptée

SELECT 1.2E3;
SELECT 1.2E-3;
SELECT -1.2E3;
SELECT -1.2E-3;

Booléens

Types

Le type BOOL ou BOOLEAN est un alias de TINYINT(1).

Format

Un booléean est TRUE / FALSE ou 1 / 0.

SELECT TRUE;
SELECT 1;
SELECT FALSE;
SELECT 0;

Dates

Types

Type Description Taille en mémoire Min..max
date AAAA-MM-JJ 3 octets '1000-01-01'
'9999-12-31'
time hh:mm:ss 3 octets '00:00:00'
'23:59:59'
datetime AAAA-MM-JJ hh:mm:ss 5 octets '1000-01-01 00:00:00'
'9999-12-31 23:59:59'
timestamp  AAAA-MM-JJ hh:mm:ss        4 octets '1970-01-01 00:00:01' UTC
'2038-01-09 03:14:07' UTC

Format

Une chaîne de caractère peut être convertie en date si elle est au format ‘YYYY-MM-DD’ ou ‘YY-MM-DD’.
N’importe quel délimiteur est admis ou même aucun.

SELECT DATE('2012-12-31');
SELECT DATE('2012/12/31');
SELECT DATE('2012^12^31');
SELECT DATE('2012@12@31');
SELECT DATE('20121231');

Les datetimes sont au format ‘YYYY-MM-DD HH:MM:SS’ ou ‘YY-MM-DD HH:MM:SS’.
N’importe quel délimiteur au même aucun. Un délimiteur différent peut être utilisé entre la partie date et heure.
La date et l’heure sont separées par un espace ou par “T” (ou aucun si aucun délimiteur n’est utilisé).

SELECT TIMESTAMP('2012-12-31 11:30:45');
SELECT TIMESTAMP('2012^12^31 11+30+45');
SELECT TIMESTAMP('2012/12/31 11*30*45');
SELECT TIMESTAMP('2012@12@31 11^30^45');
SELECT TIMESTAMP('2012-12-31T11:30:45');
SELECT TIMESTAMP('20121231113045');

Les times sont au format ‘HH:MM:SS’, ‘HH:MM’ ou ‘SS’. Comme délimiteur, on utilise soit : soit rien.

SELECT TIME('10:11:12');
SELECT TIME(101112);
SELECT TIME('10:11');
SELECT TIME('12');

Chaînes de caractère

Types

Type Description Max octets Max caractères(1)
char(n) Chaîne de taille fixe à n caractères 255 octets 255
varchar(n)  ... taille variable < n caractères 255 octets 255
tinytext ... taille variable < 2^8 octets    (2) 255 octets 255
text ... taille variable < 2^16 octets  (2) 64 Kilo 65 535
mediumtext ... taille variable < 2^24 octets  (2) 16 Mega 16 777 215
longtext ... taille variable < 2^32 octets  (2) 4 Giga 4 294 967 295
enum('v1', 'v2') Une des valeurs énumérées 64 Kilo 65 535
set('v1', 'v2') Une ou des valeurs parmis celles énumérées 64 Kilo 64 valeurs max.

(1) Calculé en caractères de 1 octet (en UTF-8 un caractère peut prendre entre 1 et 4 octets)
(2) Il n’est pas possible d’allouer un attribut DEFAULT à une colonne de type TEXT

Encodage

Il est possible de préciser l’encodage à utiliser.
CHARACTER SET précise l’encodage, COLLATE les règles de comparaison des chaînes (a/A, e/é, ss/ß, etc).

nom_type [CHARACTER SET charset_name] [COLLATE collation_name]

Exemple:

CREATE TABLE IF NOT EXISTS labels (
  id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  label VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
)

Format

Le texte est entouré de simples ou doubles quotes.

SELECT 'a string';
SELECT "another string";

On peut échapper une quote avec \ ou en la doublant

SELECT 'a\'b';
SELECT 'a''b';

Les chaînes placés les unes à côté des autres (séparées par un espace) sont concaténées

SELECT 'a string';
SELECT 'a' ' ' 'string';

Les caractères spéciaux sont acceptés

SELECT 'a\nb';

Code hexadécimal

Des caractères hexadécimaux peuvent être crées avec la notation X'val' ou 0xval.

SELECT X'01AF';
SELECT X'01af';
SELECT x'01AF';
SELECT x'01af';
SELECT 0x01AF;
SELECT 0x01af;

Code binaire

Les bits sont notés b'val' ou 0bval

SELECT b'01';
SELECT B'01';
SELECT 0b01;

Encodage

L’encodage et collations peuvent être précisé pour les données texte (y compris hexa et bits).

SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8'string' COLLATE utf8_danish_ci;
SELECT _latin1 X'4D7953514C';
SELECT _utf8 0x4D7953514C COLLATE utf8_danish_ci;
SELECT _latin1 b'1000001';
SELECT _utf8 0b1000001 COLLATE utf8_danish_ci;