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

Řetězce UTF-8 v databázi MySQL se po změně konfigurace zkazily

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

To je to, co získáte, pokud zacházíte s posloupností bajtů jako s UTF-8 a poté ji zakódujete jako ISO-8859-1. 3F je ? , který byl zahrnut jako náhradní znak, protože UTF-8 C6 92 je U+0192 ƒ který v ISO-8859-1 neexistuje. Existuje však v kódové stránce Windows 1252 Western European, což je kódování velmi podobné ISO-8859-1; tam je to bajt 0x83.

C3 83 C2 AA

Projděte si další kolo zacházení s UTF-8-bajty-a-kódování-do-cp1252 a získáte:

C3 AA

což je konečně UTF-8 pro ê .

Všimněte si, že i když poskytujete ne-XML HTML stránku explicitně jako ISO-8859-1, prohlížeče budou ve skutečnosti používat kódování cp1252 z ošklivých historických důvodů.

Bohužel MySQL nemá kódování cp1252; latin1 je (správně) ISO-8859-1. Takže nebudete moci opravit data dumpingem jako latin1 a opětovným načtením jako utf8 (dvakrát). Skript byste museli zpracovat textovým editorem, který lze uložit jako buď (nebo např. v Pythonu file(path, 'rb').read().decode('utf-8').encode('cp1252').decode('utf-8').encode('cp1252') ).



  1. Existuje nějaký způsob, jak Laravel spustit soubor .SQL pro načtení dat?

  2. Jak mohu efektivně využít hodnoty zeměpisné délky/šířky v Mysql?

  3. Mysql výběr ze dvou tabulek

  4. Jak obnovím z příkazu drop databáze pomocí binárního protokolu mysql?