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

UTF-8-strenge i en MySQL-database blev rodet efter konfigurationsændring

C3 83 C6 92 C3 82 C2 AA
C3 3F C2 AA

Det er, hvad du får, hvis du behandler sekvensen af ​​bytes som UTF-8 og derefter koder den som ISO-8859-1. 3F er ? , som er inkluderet som et erstatningstegn, fordi UTF-8 C6 92 er U+0192 ƒ som ikke findes i ISO-8859-1. Men det findes i Windows kodetabel 1252 vesteuropæisk, en kodning, der ligner ISO-8859-1 meget; der er det byte 0x83.

C3 83 C2 AA

Gå gennem endnu en omgang treat-as-UTF-8-bytes-and-encode-to-cp1252, og du får:

C3 AA

som endelig er UTF-8 for ê .

Bemærk, at selvom du eksplicit viser en HTML-side uden XML som ISO-8859-1, vil browsere faktisk bruge cp1252-kodningen på grund af grimme historiske årsager.

MySQL har desværre ikke en cp1252-kodning; latin1 er (korrekt) ISO-8859-1. Så du vil ikke være i stand til at rette op på dataene ved at dumpe som latin1 og derefter genindlæse som utf8 (to gange). Du skal behandle scriptet med en teksteditor, der kan gemme som enten (eller f.eks. i Python file(path, 'rb').read().decode('utf-8').encode('cp1252').decode('utf-8').encode('cp1252') ).



  1. Vis en enkelt kolonneværdi for mysqli-forespørgsel

  2. Opret MySQL-forespørgselsovervågningsbash-script

  3. mysql cross join, men uden duplikeret par?

  4. Forhindring af cachelagring af forespørgsler i MySQL