sql >> Database >  >> RDS >> Mysql

Hoe kan ik in MySQL zoeken naar tekst met tekens in de Aziatische taal?

In theorie zou je dit kunnen doen:

  1. Zoek de unicode-bereiken waarvoor u wilt testen.
  2. Coder handmatig het begin en einde in UTF-8.
  3. Gebruik de eerste byte van elk van de gecodeerde begin- en eindpunten als een bereik voor een REGEXP.

Ik geloof dat het CJK-bereik ver genoeg verwijderd is van zaken als het eurosymbool, zodat er weinig of geen valse positieven en valse negatieven zouden zijn.

Bewerken: We hebben de theorie nu in de praktijk gebracht!

Stap 1: Kies het tekenbereik. Ik stel voor \u3000-\u9fff; gemakkelijk te testen en zou ons bijna perfecte resultaten moeten geven.

Stap 2: Coderen in bytes. (Wikipedia utf-8-pagina)

Voor ons gekozen bereik zijn de utf-8-gecodeerde waarden altijd 3 bytes, waarvan de eerste 1110xxxx is, waarbij xxxx de meest significante vier bits van de unicode-waarde is.

We willen dus bytes bewerken in het bereik 11100011 tot 11101001, of 0xe3 tot 0xe9.

Stap 3: Maak onze regexp met behulp van de zeer handige (en zojuist door mij ontdekte) UNHEX-functie.

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

Heb het net uitgeprobeerd. Werkt perfect. :)



  1. Zoek de afstand tussen twee punten met behulp van de lengte- en breedtegraad in mysql

  2. MySQL 'Order By' - alfanumeriek correct sorteren

  3. Krijg Prevision Volgende record in EEN RIJ

  4. Optimale MySQL-configuratie (my.cnf)