sql >> Databáze >  >> RDS >> Mysql

Jak detekovat znaky UTF-8 ve sloupci zakódovaném Latin1 - MySQL

Kódování znaků, stejně jako časová pásma, je neustálým zdrojem problémů.

Co můžete udělat, je vyhledat jakékoli znaky s vysokým ASCII, protože se jedná buď o znaky nebo symboly s diakritikou LATIN1, nebo o první z vícebajtových znaků UTF-8. Rozpoznat rozdíl nebude snadné, pokud nebudete trochu podvádět.

Chcete-li zjistit, jaké kódování je správné, stačí SELECT dvě různé verze a vizuálně porovnat. Zde je příklad:

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

To je neobvykle komplikované, protože se zdá, že motor regulárních výrazů MySQL ignoruje věci jako \x80 a vyžaduje použití UNHEX() místo toho.

Výsledkem jsou tyto výsledky:

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


  1. Jaké jsou různé způsoby vkládání dat do SQL Server Table - SQL Server / TSQL Tutorial část 100

  2. JSON_MERGE_PATCH() vs JSON_MERGE_PRESERVE() v MySQL:Jaký je rozdíl?

  3. Výukový program SQL JOINs s příklady

  4. Vrátí počet řádků ovlivněných příkazy UPDATE