Laga konstiga tecken i MySQL och phpMyAdmin

Visar phpMyAdmin, din SQL-dump eller ditt program ä eller ? i stället för ä? Oftast stämmer inte tabellen, anslutningen och importen överens. Mojibuster lagar exporter direkt i webbläsaren – sedan ställer du in MySQL rätt för gott.

Fungerar med text och med de här filerna:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Till exempel exporter från Excel, databasbackuper, undertexter eller webbplatskod.

Fixa

  1. Dra hit en fil eller klistra in text
  2. Fixen sker automatiskt
  3. Kopiera eller ladda ner
eller dra hit en fil

Tre ställen där MySQL behöver en teckenkodning

  • Kolumn eller tabell: teckenuppsättningen som data lagras i, till exempel utf8mb4 eller latin1.
  • Anslutning: teckenuppsättningen som klient och server pratar med – sätts med SET NAMES utf8mb4 eller i anslutningsinställningarna.
  • Fil: kodningen som används när en import läses eller en export skrivs – i phpMyAdmin under Teckenuppsättning för filen (Character set of the file).

Om de tre inte stämmer överens går tecknen sönder. Vanligast: UTF-8-text skrevs över en latin1-anslutning till en latin1-kolumn. Programmet ser bra ut, men phpMyAdmin och exporten visar ä.

En rad från en CSV-export i phpMyAdmin

Före

"1","Åsa Björk","Älvvägen 12","Göteborg"

Efter

"1","Åsa Björk","Älvvägen 12","Göteborg"

Kontrollera teckenuppsättningarna

  • SHOW VARIABLES LIKE 'character_set%'; visar inställningarna för server och anslutning.
  • SHOW CREATE TABLE kunder; visar teckenuppsättningen för tabellen och dess kolumner.
  • SELECT namn, HEX(namn) FROM kunder LIMIT 5; visar de verkliga byten: i en utf8mb4-kolumn är C3A4 ett ä, medan C383C2A4 är ett redan trasigt ä.

Laga en export eller dump

  1. Exportera tabellen i phpMyAdmin som SQL eller CSV – eller med mysqldump --default-character-set=utf8mb4.
  2. Släpp filen i rutan ovan. Mojibuster lagar bara de trasiga ställena; korrekta tecken lämnas orörda.
  3. Kontrollera de lagade ställena under Vad ändrades? och ladda ner filen.
  4. Importera den till en tabell med utf8mb4 och välj utf-8 som teckenuppsättning i importdialogen.
  5. Testa först på en kopia innan du ersätter den riktiga tabellen.

Exporten lämnar aldrig din dator – viktigt när det gäller kunduppgifter. Hur du fixar UTF-8-fel i allmänhet står på sidan fixa UTF-8-tecken.

Åtgärda orsaken

  • Skapa nya tabeller med DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_swedish_ci eller utf8mb4_unicode_ci.
  • Ställ in programmets anslutning på utf8mb4, i PHP till exempel med charset=utf8mb4 i PDO-DSN:et.
  • Ligger UTF-8-byten i en latin1-kolumn: konvertera den inte direkt med CONVERT TO – då kodas de en gång till och du får dubbelkodad text, se vad är mojibake. Det säkra sättet går via en binär typ: först MODIFY namn VARBINARY(255), sedan MODIFY namn VARCHAR(255) CHARACTER SET utf8mb4.
  • Ersätter MySQL tecken med ? kan kolumnen eller anslutningen inte representera dem. Det som redan lagrats så är förlorat – mer under frågetecken i stället för åäö.

Vanliga frågor

Varför ser allt rätt ut i mitt program men inte i phpMyAdmin?

Programmet och databasen gör samma fel två gånger: programmet skriver UTF-8 över en latin1-anslutning och läser tillbaka det på samma sätt. phpMyAdmin ansluter rätt och visar därför det som verkligen är lagrat. Ligger felet redan i en WordPress-export finns mer på sidan om WordPress och databas och om dubbelkodad text.

Vilken kollation ska jag använda?

utf8mb4_swedish_ci ger svensk sortering (å, ä, ö sist i alfabetet), utf8mb4_unicode_ci passar de flesta andra program. Viktigast är teckenuppsättningen utf8mb4 – inte utf8, som i MySQL inte kan lagra emojis.

Fungerar det med MariaDB också?

Ja. MariaDB hanterar teckenuppsättningar som MySQL, och kommandona är desamma.

Hur stor får dumpen vara?

Upp till 100 MB per fil. Exportera större databaser tabell för tabell.

Mer att läsa