Correggere i caratteri strani in MySQL e phpMyAdmin

phpMyAdmin, il tuo dump SQL o la tua applicazione mostrano è o ? al posto di è? Di solito tabella, connessione e importazione non combaciano. Mojibuster ripara gli export nel browser; poi imposti MySQL correttamente una volta per tutte.

Funziona con testo e con questi file:

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

Per esempio esportazioni di Excel, backup di database, sottotitoli o codice di siti web.

Correggi

  1. Trascina un file o incolla il testo
  2. La correzione è automatica
  3. Copia o scarica
oppure trascina semplicemente un file qui
  • Nessun upload. I tuoi file vengono corretti direttamente nel browser e non lasciano mai il tuo dispositivo.

  • Server nell’UE. Mojibuster gira su un server in Finlandia (UE); si applica il Regolamento generale sulla protezione dei dati (GDPR). Testo del GDPR (EUR-Lex)

  • Per aziende e DPO: verifica tu stesso

Tre punti in cui MySQL ha bisogno di una codifica

  • Colonna o tabella: il set di caratteri con cui sono salvati i dati, come utf8mb4 o latin1.
  • Connessione: il set di caratteri con cui parlano client e server. Si imposta con SET NAMES utf8mb4 o nelle impostazioni di connessione.
  • File: la codifica con cui si legge un'importazione o si scrive un'esportazione. In phpMyAdmin si trova in Set di caratteri del file.

Se i tre non combaciano, i caratteri si rompono. Il caso più frequente: testo UTF-8 scritto tramite una connessione latin1 in una colonna latin1. L'applicazione sembra a posto, ma phpMyAdmin e l'export mostrano è.

Una riga di un export CSV di phpMyAdmin

Prima

"1","Niccolò Perché","Via Garibaldi, località Città Alta 12","Perugia"

Dopo

"1","Niccolò Perché","Via Garibaldi, località Città Alta 12","Perugia"

Controllare i set di caratteri

  • SHOW VARIABLES LIKE 'character_set%'; mostra le impostazioni di server e connessione.
  • SHOW CREATE TABLE clienti; mostra il set di caratteri della tabella e delle sue colonne.
  • SELECT nome, HEX(nome) FROM clienti LIMIT 5; mostra i byte reali: in una colonna utf8mb4, C3A8 è una è, mentre C383C2A8 è un è già rotto.

Riparare un export o un dump

  1. Esporta la tabella in phpMyAdmin come SQL o CSV, oppure con mysqldump --default-character-set=utf8mb4.
  2. Trascina il file nel riquadro qui sopra. Mojibuster ripara solo i punti rotti; i caratteri corretti restano invariati.
  3. Controlla i punti riparati in Che cosa è cambiato? e scarica il file.
  4. Importalo in una tabella utf8mb4 e scegli utf-8 come set di caratteri nella finestra di importazione.
  5. Prova prima su una copia, prima di sostituire la tabella vera.

L'export non lascia mai il tuo computer, un aspetto importante con i dati dei clienti. Se il testo è già stato codificato due volte, leggi prima la pagina sulla doppia codifica.

Eliminare la causa

  • Crea le nuove tabelle con DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci.
  • Imposta la connessione della tua applicazione su utf8mb4; in PHP, per esempio, con charset=utf8mb4 nel DSN di PDO.
  • Se in una colonna latin1 ci sono byte UTF-8, non convertirla direttamente con CONVERT TO: si codifica una seconda volta e nasce un testo con doppia codifica. La via sicura passa da un tipo binario: prima MODIFY nome VARBINARY(255), poi MODIFY nome VARCHAR(255) CHARACTER SET utf8mb4.
  • Se MySQL sostituisce i caratteri con ?, la colonna o la connessione non riesce a rappresentarli. Ciò che è già stato salvato così è perso; altro in punti interrogativi al posto degli accenti.

Domande frequenti

Perché nella mia applicazione si vede bene ma in phpMyAdmin no?

Perché applicazione e database commettono lo stesso errore due volte: l'applicazione scrive UTF-8 su una connessione latin1 e lo rilegge allo stesso modo. phpMyAdmin si collega correttamente e quindi mostra ciò che è davvero salvato. Se vedi anche sequenze lunghe come è, leggi doppia codifica e WordPress e database.

Quale collation devo usare?

utf8mb4_unicode_ci va bene per la maggior parte delle applicazioni; da MySQL 8 il predefinito è utf8mb4_0900_ai_ci. Conta di più il set di caratteri utf8mb4, non utf8, che in MySQL non può salvare le emoji.

Funziona anche con MariaDB?

Sì. MariaDB gestisce i set di caratteri come MySQL e i comandi sono gli stessi.

Quanto può essere grande il dump?

Fino a 100 MB per file. Esporta i database più grandi tabella per tabella.

Altre guide