Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête de recherche insensible aux accents dans MySQL

Vous pouvez modifier le classement au moment de l'exécution dans la requête sql,

...where title like '%torun%' collate utf8_general_ci

mais attention, la modification du classement à la volée au moment de l'exécution renonce à la possibilité que mysql utilise un index, de sorte que les performances sur les grandes tables peuvent être terribles.

Ou, vous pouvez copier la colonne dans une autre colonne, telle que searchable_title , mais modifiez le classement dessus. Il est en fait courant de faire ce type de choses, où vous copiez des données mais les avez sous une forme légèrement différente qui est optimisée pour une charge de travail/un objectif spécifique. Vous pouvez utiliser des déclencheurs comme un bon moyen de synchroniser les colonnes dupliquées. Cette méthode a le potentiel de bien fonctionner si elle est indexée.

Remarque - Assurez-vous que votre base de données contient vraiment ces caractères et non des entités html. De plus, le jeu de caractères de votre connexion est important. Ce qui précède suppose qu'il est défini sur utf8, par exemple, via set noms comme set names utf8

Sinon, vous avez besoin d'un introducteur pour la valeur littérale

...where title like _utf8'%torun%' collate utf8_general_ci

et bien sûr, la valeur entre guillemets simples doit être encodée en utf8, même si le reste de la requête sql ne l'est pas.