Le concept de valeur NULL
est une source intarrissable d'erreur pour les néophytes de SQL, qui pensent souvent que NULL
est équivalent à la chaîne vide ''
. Ceci est totalement faux! Par exemple, les deux commandes suivantes sont complètement différentes :
mysql> INSERT INTO my_table (phone) VALUES (NULL);
mysql> INSERT INTO my_table (phone) VALUES ("");
Les deux exemples insèrent une valeur dans la colonne phone
, mais le premier insère la valeur NULL
et le second insère la chaîne vide. La première commande peut être considéré comme ``numéro de téléphone inconnu'' et le deuxième signifiant : ``elle n'a pas de téléphone''.
En SQL, la valeur NULL
est toujours fausse lors des comparaisons avec une autre valeur, même avec elle même. Une expression qui contient NULL
retournera toujours NULL
à moins que cela ne soit indiqué dans la documentation des opérateurs et fonction mises en jeu. Toutes les colonnes suivantes retourneront NULL
:
mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);
Si vous voulez rechercher des colonnes qui contiennent des valeurs NULL
, vous ne pourrez pas utiliser le test =NULL
. La commande suivant retournera toujours 0 lignes, car expr = NULL
est TOUJOURS fausse, pour toute expression:
mysql> SELECT * FROM my_table WHERE phone = NULL;
Pour rechercher des valeurs NULL
, vous devez utiliser le test IS NULL
. Les exemples suivants montrent comment rechercher les valeurs NULL
dans la colonne du numéro de téléphone :
mysql> SELECT * FROM my_table WHERE phone IS NULL;
mysql> SELECT * FROM my_table WHERE phone = "";
Avec MySQL, comme pour de nombreux serveurs SQL, vous ne pouvez pas indexer des colonnes qui contiennent des valeurs NULL
. Vous devez impérativement déclarer les colonnes comme NOT NULL
. Par conséquent, il ne sera pas possible d'insérer une valeur NULL
dans une colonne indexée.
Lorsque vous chargez une table avec LOAD DATA INFILE
, les colonnes vides seront remplies par ''
. Si vous voulez insérer une valeur NULL
dans une colonne, vous devrez utiliser la séquence \N
dans le fichier texte. Le mot 'NULL'
ne peut être utilisé que dans certaines circonstances. Reportez vous à la section LOAD DATA
.
Lorsque vous utiliser une clause ORDER BY
, les valeurs NULL
apparaîtront en premier. Si vous triez dans l'ordre descendant (DESC)
, NULL
seront placées en dernier. Avec les clauses GROUP BY
, toutes les valeurs NULL
sont considérées comme égales.
Pour faciliter la manipulation des valeurs NULL
, vous disposez des opérateurs IS NULL
et IS NOT NULL
et de la fonction IFNULL()
.
Pour certains types de colonnes, NULL
est géré de manière particulière. Si vous insérez NULL
dans la première colonne de type TIMESTAMP
d'une table, la date courante sera insérée. Si vous insérez NULL
dans une colonne AUTO_INCREMENT
, le numéro suivant sera inséré.