Liste complètes des types
Taille des types
Limite du nombre de colonnes et taille des n-upplets
Tout type de données peut prendre la valeur nulle si le schema l’autorise.
Les valeurs nulles sont: NULL
, null
et \N
.
SELECT NULL;
SELECT null;
SELECT \N;
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 |
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 :
TINYINT
vont de -128 à 127TINYINT UNSIGNED
vont de 0 à 255.type UNSIGNED
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
.
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;
Le type BOOL
ou BOOLEAN
est un alias de TINYINT(1)
.
Un booléean est TRUE
/ FALSE
ou 1
/ 0
.
SELECT TRUE;
SELECT 1;
SELECT FALSE;
SELECT 0;
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 |
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');
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
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
)
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';
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;
Les bits sont notés b'val'
ou 0bval
SELECT b'01';
SELECT B'01';
SELECT 0b01;
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;