sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kan jeg forespørge efter tekst, der indeholder asiatiske tegn i MySQL?

I teorien kunne du gøre dette:

  1. Find de unicode-områder, du vil teste for.
  2. Kod starten og slutningen manuelt til UTF-8.
  3. Brug den første byte af hver af de kodede start og slut som et interval for en REGEXP.

Jeg mener, at CJK-intervallet er langt nok væk fra ting som euro-symbolet til, at de falske positive og falske negativer ville være få eller ingen.

Rediger: Vi har nu omsat teori i praksis!

Trin 1: Vælg tegnintervallet. Jeg foreslår \u3000-\u9fff; let at teste for og burde give os næsten perfekte resultater.

Trin 2: Indkode til bytes. (Wikipedia utf-8 side)

For vores valgte område vil utf-8-kodede værdier altid være 3 bytes, hvoraf den første er 1110xxxx, hvor xxxx er de vigtigste fire bits af unicode-værdien.

Derfor ønsker vi at mache bytes i området 11100011 til 11101001 eller 0xe3 til 0xe9.

Trin 3: Lav vores regexp ved hjælp af den meget praktiske (og lige nu opdaget af mig) UNHEX-funktion.

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

Har lige prøvet det. Virker som en charme. :)



  1. Sådan returnerer du positionen for et listeelement i MySQL

  2. Sådan fungerer ASCII() i MariaDB

  3. mysql delvis ordsøgning

  4. MySQL Stored Procedures virker ikke med SELECT (grundlæggende spørgsmål)