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

Comment puis-je rechercher du texte contenant des caractères de langue asiatique dans MySQL ?

En théorie, vous pourriez faire ceci :

  1. Recherchez les plages Unicode que vous souhaitez tester.
  2. Encodez manuellement le début et la fin en UTF-8.
  3. Utilisez le premier octet de chacun des débuts et fins codés comme plage pour une REGEXP.

Je pense que la gamme CJC est suffisamment éloignée de choses comme le symbole de l'euro pour que les faux positifs et les faux négatifs soient peu ou pas du tout.

Modifier : Nous avons maintenant mis la théorie en pratique !

Étape 1 : Choisissez la plage de caractères. Je suggère \u3000-\u9fff; facile à tester et devrait nous donner des résultats presque parfaits.

Étape 2 : Encoder en octets. (page Wikipédia utf-8)

Pour notre plage choisie, les valeurs encodées en utf-8 seront toujours de 3 octets, dont le premier est 1110xxxx, où xxxx est les quatre bits les plus significatifs de la valeur unicode.

Ainsi, nous voulons coder des octets dans la plage 11100011 à 11101001, ou 0xe3 à 0xe9.

Étape 3 : Créez notre expression rationnelle en utilisant la fonction UNHEX très pratique (et que je viens juste de découvrir).

SELECT * FROM `mydata`
WHERE `words` REGEXP CONCAT('[',UNHEX('e3'),'-',UNHEX('e9'),']')

Je viens de l'essayer. Fonctionne comme un charme. :)