par
Perine » 04 févr. 2013, 17:56
Évite de mettre des enum pour des nombres comme 0 et 1. tinyint est plus adapté à ça.
La raison est que l'index de la première valeur pour une énumération est 1. Il peut donc y avoir une confusion assez simplement. C'est d'ailleurs déconseillé sur la doc de MySQL.
Code : Tout sélectionner
MariaDB [test]> create table test_enum (valeur enum('0', '1'));
Query OK, 0 rows affected (0.08 sec)
MariaDB [test]> insert into test_enum (valeur) values (1);
Query OK, 1 row affected (0.02 sec)
MariaDB [test]> select * from test_enum;
+--------+
| valeur |
+--------+
| 0 |
+--------+
1 row in set (0.00 sec)
Pour ce qui est de l'index, il est normal qu'il ne soit pas utilisé étant donné que la requête n'utilisera potentiellement que deux champs sur les trois. Il faut donc en effet poser deux ou trois index, en fonction de la disparité des données (deux: [(id1, etat), (id2, etat)], trois: [id1, id2, etat])
Évite de mettre des enum pour des nombres comme 0 et 1. tinyint est plus adapté à ça.
La raison est que l'index de la première valeur pour une énumération est 1. Il peut donc y avoir une confusion assez simplement. C'est d'ailleurs déconseillé sur la doc de MySQL.
[code]
MariaDB [test]> create table test_enum (valeur enum('0', '1'));
Query OK, 0 rows affected (0.08 sec)
MariaDB [test]> insert into test_enum (valeur) values (1);
Query OK, 1 row affected (0.02 sec)
MariaDB [test]> select * from test_enum;
+--------+
| valeur |
+--------+
| 0 |
+--------+
1 row in set (0.00 sec)
[/code]
Pour ce qui est de l'index, il est normal qu'il ne soit pas utilisé étant donné que la requête n'utilisera potentiellement que deux champs sur les trois. Il faut donc en effet poser deux ou trois index, en fonction de la disparité des données (deux: [(id1, etat), (id2, etat)], trois: [id1, id2, etat])