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

Comment MySQL fonctionne insensible à la casse et aux accents en UTF-8

Vous avez déjà essayé d'utiliser un classement insensible aux accents pour votre recherche et votre classement.

http://dev.mysql.com/doc /refman/5.0/en/charset-collation-implementations.html

Le fait est que votre NAME La colonne semble être stockée dans le jeu de caractères latin1 (8 bits). C'est pourquoi mySQL grogne comme ça :

  COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'

Vous pouvez obtenir les résultats souhaités si vous essayez

 WHERE CONVERT(p.NAME USING utf8) LIKE _utf8 '%jose%' COLLATE utf8_general_ci;

Mais attention !

Lorsque vous utilisez n'importe quel type de fonction (dans cet exemple, CONVERT) sur la colonne d'une instruction WHERE, vous annulez les tentatives de MySQL d'optimiser votre recherche avec des index. Si ce projet va devenir volumineux (c'est-à-dire si vous avez beaucoup de lignes dans vos tables), vous devez stocker vos données au format utf8, et non latin1. (Vous savez probablement déjà que votre LIKE '%whatever%' le terme de recherche annule également l'indexation de MySQL.)