normaliser les caractères accentués dans les requêtes MySQL
J'aimerais être en mesure de faire des requêtes qui normaliser les caractères accentués, de sorte que, par exemple:
é, è, and ê
sont tous traités comme des "e", dans les requêtes en utilisant '=' et 'comme'. J'ai une ligne avec le nom d'utilisateur de champ 'rené", et je voudrais être en mesure de correspondre avec les deux 'rené " et " rené'.
Je suis d'essayer de le faire avec le 'collate' clause dans MySQL 5.0.8. J'obtiens l'erreur suivante:
mysql> select * from User where username = 'rené' collate utf8_general_ci;
ERROR 1253 (42000): COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'
FWIW, ma table a été créé avec:
CREATE TABLE `User` (
`id` bigint(19) NOT NULL auto_increment,
`username` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniqueUsername` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=56790 DEFAULT CHARSET=utf8
Qu'advient-il si vous changez de table jeu de caractères à
friedo - n'est-ce pas le DEFAULT CHARSET=utf8? (Je n'ai pas fait de créer cette table, j'rétro-ingénierie via "show create table'Utilisateur).
Oui, c'est ce qu'il est censé faire. Je ne sais pas pourquoi MySQL semble penser le chartset est latin1 si vous l'avez configuré pour de l'utf-8, si.
utf8
?friedo - n'est-ce pas le DEFAULT CHARSET=utf8? (Je n'ai pas fait de créer cette table, j'rétro-ingénierie via "show create table'Utilisateur).
Oui, c'est ce qu'il est censé faire. Je ne sais pas pourquoi MySQL semble penser le chartset est latin1 si vous l'avez configuré pour de l'utf-8, si.
OriginalL'auteur George Armhold | 2010-02-20
Vous devez vous connecter pour publier un commentaire.
La raison de l'erreur n'est pas la table, mais le characterset de votre entrée, c'est à dire le "rené" dans votre requête. Le comportement dépend de la character_set_connection variable:
Avec le Client MySQL, les modifier en utilisant
SET NAMES
:(à partir de http://dev.mysql.com/doc/refman/5.5/en/charset-connection.html)
Exemple de sortie:
Altenatively, utiliser explicitement définir le jeu de caractères à l'aide d'un jeu de caractères introducteur':
Je sais que cette question est assez vieux, mais depuis que Google m'a amené ici pour une question, je pensais qu'il mérite tout de même une réponse 🙂
OriginalL'auteur sfussenegger
Je proposerais que vous enregistrez le normalisée versions de votre table en outre avec le nom d'utilisateur réel. Modification de l'encodage à la volée peut être coûteux, et vous avez à faire la conversion pour chaque ligne sur chaque recherche.
Si vous êtes à l'aide de PHP, vous pouvez utiliser iconv() de gérer la conversion:
Alors vous venais de sauver les deux versions et utiliser la version normalisée pour la recherche et la normale nom d'utilisateur pour l'affichage. La comparaison et la sélection sera beaucoup plus rapide à partir de la normalisés colonne, à condition que vous normaliser la chaîne de recherche aussi:
Bien sûr, cette méthode pourrait ne pas être viable si vous avez plusieurs colonnes qui doivent normalisations, mais dans votre cas ce serait bon.
I utilisation de PHP fonctionne pas ... u besoin de plus de 1 ligne suivante
str_replace("?", "%", $normalized);
.. profitez-en!OriginalL'auteur Tatu Ulmanen
J'ai mis en place un strtr fonction php/tr commande unix dans MySQL, vous pouvez obtenir le code source ici
Vous pouvez utiliser comme:
ou de la bande de certains caractères
OriginalL'auteur Felipe Buccioni
est une parfaite solution php, mais dans mysql? CONVERTIR?
dans mysql
Produire:
Les mots accentués n'est pas converti à pas de mots accentués, il n'est pas l'équivalent d'un translit de iconv.
RegExp ne fonctionnent pas avec l'encodage UTF-8.
Pas une solution.
OriginalL'auteur José Nobile