J'ai une base de données où nous stockons les noms d'utilisateur avec une première lettre majuscule de chaque nom - c.-à-d., IsaacSparling. J'essaye de faire autocomplete insensible à la casse contre ma base de données MySQL (v5.1.46). La table a un jeu de caractères de UTF8 et un rassemblement de utf8_unicode_ci. J'ai aussi fait ces tests contre la collation utf8_general_ci.Collation unicode insensible à la casse dans MySQL
texte ASCII fonctionne très bien:
mysql> select username from users where username like 'j%';
+----------------+
| username |
+----------------+
| J******** |
| J*********** |
| J************* |
+----------------+
3 rows in set (0.00 sec)
mysql> select username from users where username like 'J%';
+----------------+
| username |
+----------------+
| J******** |
| J*********** |
| J************* |
+----------------+
3 rows in set (0.00 sec)
(noms expurgés, mais ils sont là).
Cependant, lorsque je tente de faire la même chose pour les caractères unicode en dehors du jeu ASCII, pas de chance:
mysql> select username from users where username like 'ø%';
Empty set (0.00 sec)
mysql> select username from users where username like 'Ø%';
+-------------+
| username |
+-------------+
| Ø********* |
+-------------+
1 row in set (0.00 sec)
Certaines enquête m'a conduit à ceci: http://bugs.mysql.com/bug.php?id=19567 (tl; dr, ceci est une connue bug avec les classements Unicode, et la fixation est à la priorité «nouvelle fonctionnalité» - c'est-à-dire, ne sera pas terminé dans un délai raisonnable).
Est-ce que quelqu'un a découvert des solutions de contournement efficaces qui permettent une recherche insensible à la casse pour les caractères Unicode dans MySQL? Toutes les pensées ont apprécié!
Question intéressante! Pour autant que je comprenne le bug, cela n'a rien à voir avec votre problème? Il semble que ce soit à propos de la sensibilité de l'accent 'a' =>' ' –
Pouvez-vous vérifier si' LOWER (nom d'utilisateur) LIKE 'ø%' 'fonctionne? Il est susceptible d'être soumis au même comportement mais si ce n'est pas le cas, cela peut servir de solution de rechange –
mysql> sélectionnez 1 parmi les utilisateurs où LOWER (nom d'utilisateur) LIKE 'ø%'; Ensemble vide (0,00 sec) Aucun dé. Il semble que la transition de cas pour les caractères Unicode en dehors de l'ensemble Ascii est totalement borked. Merci pour l'idée cependant! – isparling