Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso consultar texto contendo caracteres de idioma asiático no MySQL?


Em teoria, você poderia fazer isso:
  1. Encontre os intervalos unicode que você deseja testar.
  2. Codifique manualmente o início e o fim em UTF-8.
  3. Use o primeiro byte de cada início e fim codificados como um intervalo para um REGEXP.

Eu acredito que a faixa CJK está longe o suficiente de coisas como o símbolo do euro que os falsos positivos e falsos negativos seriam poucos ou nenhum.

Editar: Agora colocamos a teoria em prática!

Etapa 1: Escolha o intervalo de caracteres. Sugiro \u3000-\u9fff; fácil de testar e deve nos dar resultados quase perfeitos.

Etapa 2: Codifique em bytes. (página da Wikipédia utf-8)

Para o intervalo escolhido, os valores codificados em utf-8 sempre serão 3 bytes, sendo o primeiro 1110xxxx, onde xxxx são os quatro bits mais significativos do valor unicode.

Assim, queremos mach bytes no intervalo de 11100011 a 11101001, ou 0xe3 a 0xe9.

Etapa 3: Faça nosso regexp usando a função UNHEX muito útil (e só agora descoberta por mim).
SELECT * FROM `mydata`
WHERE `words` REGEXP CONCAT('[',UNHEX('e3'),'-',UNHEX('e9'),']')

Acabei de experimentar. Funciona como um encanto. :)