Imaginons la table suivante:
+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| foobar | enum('0','1') | YES | | NULL | |
+--------+---------------+------+-----+---------+-------+
Exemple complètement trivial, je sais. L'astuce du jour porte donc sur les requêtes de type SELECT avec un WHERE portant sur un champ de type ENUM. Ce qu'il faut savoir, c'est que la déclaration d'un champ en tant qu'ENUM fait qu'on ne peut pas considérer ce champs comme un entier. Ainsi, la requête suivante retournera un Empty set:
SELECT * FROM foobar WHERE foobar = 0;
Quelque soit le contenu de la table foobar. Il faut écrire la requête comme suit:
SELECT * FROM foobar WHERE foobar = '0';
Et pour les petits malins qui se croient plus malins que MySQL:
mysql> create table foobar (foo enum('0', '1'), bar(0, 1));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(0, 1))' at line 1