J'ai crée une table avec quelques valeurs tel que ci dessous :
J'ai testé sous MySQL 4.1.7 sous windows et sous linux et j'obtiens le même problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE TABLE `test` ( `nom` varchar(15) character set utf8 collate utf8_swedish_ci NOT NULL default 'FR', KEY `nom` (`nom`(2)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `test` VALUES ('location'); INSERT INTO `test` VALUES ('loberge'); INSERT INTO `test` VALUES ('lotre'); INSERT INTO `test` VALUES ('boabab');
Lorsque j'effectue la requète :
SELECT * from test where nom like 'lo%'
MySQL m'indique qu'il n'y a pas de tuple correspondant à cette requète alors qu'il y en a de toute façon !
J'ai constaté qu'en mettant un index total ça marchait tres bien, idem sans en mettre, mais avec un index partiel, ça pose problème.
SELECT * from test where nom like 'l%' me renvoie par contre les 4 tuples
'l%' => 4 tuples OK
'lo%' => 0 tuples PAS OK
'loc%' => 0 tuples PAS OK
'loca%' => 1 tuple OK
'locat%' => 1 tuple OK
'locati%' => 1 tuple OK
etc..
l'index partiel de 2 caractères s'affiche ensuite en 4 (octets?) sous phpMyAdmin
si je souhaite un index partiel, c'est parce que la table réelle contiendra plusieurs millions de tuples et que c'est certainement la meilleure solution.
L'utilisation de l'utf8 est aussi réfléchi, j'ai testé en latin1, ça marche comme il faut
Je pense à un bug de MySQL, mais ça me parrait curieux quand même..
J'aimerais bien que qqun teste aussi de son coté avec MySQL 4.1 pour voir s'il obtiens les mêmes resultats
J'ai testé en ligne de commande et sous phpMyAdmin, ça donne le même resultat (NB: sous phpMyAdmin, changez " Interclassement pour la connection MySQL" en utf8_swedish_ci)
Merci d'avance ...
[Titre édité par Maximilian]
Partager