sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag fråga efter text som innehåller asiatiska tecken i MySQL?

I teorin kan du göra detta:

  1. Hitta unicode-intervallen som du vill testa för.
  2. Koda in början och slutet manuellt till UTF-8.
  3. Använd den första byten av varje kodad start och slut som ett intervall för en REGEXP.

Jag tror att CJK-intervallet är tillräckligt långt borta från saker som eurosymbolen för att de falska positiva och falska negativa skulle vara få eller inga.

Redigera: Vi har nu omsatt teori i praktiken!

Steg 1: Välj teckenintervall. Jag föreslår \u3000-\u9fff; lätt att testa och bör ge oss nästan perfekta resultat.

Steg 2: Koda till byte. (Wikipedia utf-8 sida)

För vårt valda intervall kommer utf-8-kodade värden alltid att vara 3 byte, varav den första är 1110xxxx, där xxxx är de mest signifikanta fyra bitarna av unicode-värdet.

Därför vill vi macha byte i intervallet 11100011 till 11101001, eller 0xe3 till 0xe9.

Steg 3: Gör vårt regexp med den mycket praktiska (och nyss upptäckt av mig) UNHEX-funktionen.

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

Testade det precis. Fungerar som en charm. :)



  1. Förslag för säkerhetskopiering av php-sajt och mysql db

  2. Hur sanerar man ODBC-databasindata?

  3. MySQL (eller PHP?) grupperar resultat efter fältdata

  4. Rankning av tävlingsresultat av bilder med 5-stjärniga betyg