J'ai une table MySQL avec utf8 général ci collation. Dans le tableau, je peux voir deux entrées:
un mauvais
un mauvais
J'utilise une requête qui ressemble à ceci:
SELECT * FROM `words` WHERE `Word` = 'abád'
Le résultat de la requête donne les deux mots:
un mauvais
un mauvais
Est-il possible d'indiquer que je veux seulement que MySQL trouve le mot accentué? Je veux que la requête ne retourne que
un mauvais
J'ai aussi essayé cette requête:
SELECT * FROM `words` WHERE BINARY `Word` = 'abád'
Cela ne me donne aucun résultat. Merci pour l'aide.
Si vos recherches sur ce champ vont toujours être sensibles à l’accent, déclarez alors le classement du champ comme étant utf8_bin (qui comparera pour égalité les octets codés par utf8) ou utilisez un classement spécifique au langage faisant la distinction entre le personnages accentués.
col_name varchar(10) collate utf8_bin
Si les recherches sont normalement insensibles aux accents, mais que vous souhaitez créer une exception pour cette recherche, essayez;
WHERE col_name = 'abád' collate utf8_bin
Dans ma version (MySql 5.0), aucun assemblage de jeux de caractères utf8 n'est disponible pour les recherches sensibles à la casse et aux accents. Le seul assemblage sensible aux accents pour utf8 est utf8_bin. Cependant, il est également sensible à la casse.
Mon travail a consisté à utiliser quelque chose comme ceci:
SELECT * FROM `words` WHERE LOWER(column) = LOWER('aBád') COLLATE utf8_bin
Le bogue MySQL, pour référence future, est http://bugs.mysql.com/bug.php?id=19567 .
J'avais la même erreur.
J'ai changé le classement de ma table en utf8_bin (via phpMyAdmin) et le problème a été résolu.
J'espère que ça aide! :)
Vérifiez si le type de classement de la table de base de données se termine par "_ci". Cela signifie que la casse est respectée ...
Changez-le en collant le même nom ou le nom le plus proche sans le "_ci" ...
Par exemple ... changez "utf8_general_ci" en "utf8_bin" Mke
La réponse acceptée est bonne, mais sachez que vous devrez peut-être utiliser COLLATE utf8mb4_bin à la place!
WHERE col_name = 'abád' collate utf8mb4_bin
Ci-dessus corrige des erreurs comme:
MySQL a déclaré: La documentation 1253 - COLLATION 'utf8_bin' n'est pas valide pour CARACTERE SET 'utf8mb4'
Eh bien, vous venez de décrire l’utilité de la collation utf8_general_ci (a, á, à, â, ä, å, tous égaux à a en comparaison).
Des modifications ont également été apportées au serveur MySQL 5.1 en ce qui concerne utf8_general_ci et utf8_unicode_ci, de sorte que la version du serveur dépend également. Mieux vérifier les docs.
Donc, s'il s'agit du serveur MySQL 5.0, je choisirais utf8_unicode_ci au lieu de utf8_general_ci, ce qui est manifestement faux pour votre cas d'utilisation.
SELECT * FROM `words` WHERE column = 'abád' collate latin1_General_CS
(ou votre classement incluant cs)
Vous pouvez essayer de rechercher la variable hexadécimale du caractère HEX () dans mysql et utiliser une fonction similaire dans votre langage de programmation et la faire correspondre. Cela a bien fonctionné pour moi lorsque je faisais une liste dans laquelle une personne pouvait sélectionner la première lettre d'une personne.
Cela fonctionne pour moi pour une recherche insensible à la casse et insensible à la casse dans MySql server 5.1 dans une base de données dans utf8_general_ci, où column est un LONGBLOB.
select * from words where '%Word%' LIKE column collate utf8_unicode_ci
avec
select * from words where'%Word%' LIKE column collate utf8_general_ci
le résultat est sensible à la casse mais pas sensible à l'accent.