sql >> Database >  >> RDS >> Mysql

UTF-8-strings in een MySQL-database zijn in de war geraakt na configuratiewijziging

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

Dat krijg je als je de reeks bytes behandelt als UTF-8 en deze vervolgens codeert als ISO-8859-1. 3F is ? , dat is opgenomen als een vervangend teken, omdat UTF-8 C6 92 is U+0192 ƒ die niet bestaat in ISO-8859-1. Maar het bestaat wel in Windows-codepagina 1252 West-Europees, een codering die erg lijkt op ISO-8859-1; daar is het byte 0x83.

C3 83 C2 AA

Ga door nog een ronde van treat-as-UTF-8-bytes-and-encode-to-cp1252 en je krijgt:

C3 AA

wat ten slotte UTF-8 is voor ê .

Houd er rekening mee dat zelfs als u een niet-XML HTML-pagina expliciet als ISO-8859-1 aanbiedt, browsers de cp1252-codering daadwerkelijk zullen gebruiken vanwege vervelende historische redenen.

Helaas heeft MySQL geen cp1252-codering; latin1 is (juist) ISO-8859-1. U kunt de gegevens dus niet verbeteren door te dumpen als latin1 en vervolgens opnieuw te laden als utf8 (tweemaal). Je zou het script moeten verwerken met een teksteditor die kan opslaan als (of bijvoorbeeld in Python file(path, 'rb').read().decode('utf-8').encode('cp1252').decode('utf-8').encode('cp1252') ).



  1. Waarde verlagen in mysql maar niet negatief

  2. Is er een andere manier om dit programma te implementeren zonder geneste while-lus te gebruiken?

  3. Hoe de Modulo-operator werkt in MariaDB

  4. Hoe kan ik de uitvoer van een query opslaan in een tijdelijke tabel en de tabel in een nieuwe query gebruiken?