Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wykryć znaki UTF-8 w zakodowanej kolumnie Latin1 - MySQL

Kodowanie znaków, podobnie jak strefy czasowe, jest stałym źródłem problemów.

To, co możesz zrobić, to szukać dowolnych znaków „wysokich ASCII”, ponieważ są to albo znaki akcentowane LATIN1, albo symbole, albo pierwszy znak wielobajtowy UTF-8. Odróżnienie nie będzie łatwe, chyba że trochę oszukasz.

Aby dowiedzieć się, jakie kodowanie jest poprawne, po prostu SELECT dwie różne wersje i porównaj wizualnie. Oto przykład:

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'), ']')

Jest to niezwykle skomplikowane, ponieważ silnik MySQL regexp wydaje się ignorować takie rzeczy jak \x80 i sprawia, że ​​konieczne jest użycie UNHEX() zamiast tego.

Daje to takie wyniki:

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. Jak zamawiać według daty w MySQL

  2. Jak wykonać rekurencyjne zapytanie SELECT w MySQL?

  3. MySQL aktualizuje połączoną tabelę

  4. Jak uzyskać ostatni dzień miesiąca w MySQL?

  5. Błąd:Przestrzeń tabel dla tabeli xxx istnieje. Proszę ODRZUĆ obszar tabel przed IMPORTOWANIEM