Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да открием UTF-8 символи в колона, кодирана с Latin1 - MySQL

Кодирането на знаци, подобно на часовите зони, е постоянен източник на проблеми.

Това, което можете да направите, е да потърсите всякакви символи с "висок ASCII", тъй като това са или LATIN1 акцентирани знаци или символи, или първият от многобайтов знак UTF-8. Да разбереш разликата няма да е лесно, освен ако не изневериш малко.

За да разберете кое кодиране е правилно, просто SELECT две различни версии и сравнете визуално. Ето един пример:

SELECT CONVERT(CONVERT(name USING BINARY) USING latin1) AS latin1, 
       CONVERT(CONVERT(name USING BINARY) USING utf8) AS utf8 
FROM users 
WHERE CONVERT(name USING BINARY) RLIKE CONCAT('[', UNHEX('80'), '-', UNHEX('FF'), ']')

Това се прави необичайно сложно, тъй като механизмът за регулярни изрази на MySQL изглежда игнорира неща като \x80 и налага използването на UNHEX() вместо това.

Това води до такива резултати:

latin1                utf8
----------------------------------------
Björn                Björn


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Невалиден тип синтактична грешка=MyISAM в DDL, генериран от Hibernate

  2. MySQL - колко реда мога да вмъкна в един оператор INSERT?

  3. Как да получите най-новия запис във всяка група с помощта на GROUP BY?

  4. Речник на базата данни на DevOps за начинаещи в MySQL

  5. Предупреждение:mysql_connect():[2002] Няма такъв файл или директория (опитва се да се свърже чрез unix:///tmp/mysql.sock) в