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

Sådan finder du UTF-8-tegn i en Latin1-kodet kolonne - MySQL

Tegnkodning er ligesom tidszoner en konstant kilde til problemer.

Hvad du kan gøre, er at kigge efter "høj-ASCII"-tegn, da disse enten er LATIN1-accenttegn eller symboler, eller det første af et UTF-8 multi-byte-tegn. Det bliver ikke let at se forskel, medmindre du snyder en smule.

For at finde ud af, hvilken kodning der er korrekt, SELECT to forskellige versioner og sammenligne visuelt. Her er et eksempel:

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

Dette gøres usædvanligt kompliceret, fordi MySQL regexp-motoren ser ud til at ignorere ting som \x80 og gør det nødvendigt at bruge UNHEX() metode i stedet.

Dette giver resultater som dette:

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


  1. Hvordan SUBTIME() virker i MariaDB

  2. Eksempel på en simpel fletsætning i SQL Server

  3. Postgres adgangskodegodkendelse mislykkes

  4. Hvad er AWS RDS