Bonjour,
Je dispose d'un serveur mySQL dont les caractéristiques sont les suivantes
Requête proposée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Version 5.0.33 Jeu de caractères pour MySQL: UTF-8 Unicode (utf8) Interclassement pour la connexion MYSQL : UTF8_unicode_ci
Sous MySQL il semblerait qu'en utf8_unicode_ci, au niveau du tri 'é'='e' mais malheureusement également au niveau de l'insertion donc une fois le 'é' inséré, le 'e' ne peut pas l'être puisque la clé est unique. J'ai remplacé dans la requête utf8_unicode_ci par utf8_bin : la requête passe mais un SELECT ... ORDER BY test; donne la séquence 'e','z','é' car en utf8_bin les caractères accentués sont classés après l'alphabet non accentué.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `test` varchar(8) collate utf8_unicode_ci NOT NULL, UNIQUE KEY `test` (`test`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; INSERT INTO `test` VALUES ('é'); INSERT INTO `test` VALUES ('e'); INSERT INTO `test` VALUES ('z'); -->#1062 - Duplicata du champ 'e' pour la clef 'test'
J'ai trouvé 2 solutions qui me conviennent mal toutes les deux :
- Remplacer la clé unique par un simple index ce qui complique évidemment les codes d'insertion et de modification dans la table si l'on veut gérer l'unicité du champ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part CREATE TABLE `test` ( `test` varchar(8) collate utf8_unicode_ci NOT NULL, KEY `test` (`test`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;- Modifier les caractéristiques du serveur ainsi
La requête proposée initialement passe sans modification et le tri est correct. Mais le même genre d'interclassement sur un jeu de caractères dans une requête de création de table provoque une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Jeu de caractères pour MySQL: UTF-8 Unicode (utf8) Interclassement pour la connexion MYSQL : latin1_swedish_ciCela semble passer au niveau des caractéristiques du serveur mais est-ce recommandé ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part --> #1253 - COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8'
Connaissez-vous une autre solution en utf8 avec MySQL 5 ?
Merci d'avance. Cordialement. Gilles
Partager