Rezolvarea problemelor cu diacritice și caractere corupte după importul bazei de date MySQL

O problemă des întâlnită atunci când realizezi importul sau migrarea unei baze de date MySQL este apariția unor caractere ciudate sau corupte (precum semne de întrebare sau succesiuni de simboluri indescifrabile) în paginile site-ului. Cel mai frecvent, acest fenomen afectează textele articolelor și comentariile ce conțin diacritice sau caractere speciale.

Care este cauza apariției caracterelor corupte?

De cele mai multe ori, problema provine dintr-o nepotrivire între seturile de caractere (character set sau charset). Acest lucru se întâmplă când datele originale au fost salvate într-o anumită codare (spre exemplu, latin1 sau ISO-8859-1), iar la export sau la import serverul le interpretează și le stochează într-un alt format (cum ar fi UTF-8), fără o conversie adecvată.

Cum poți preveni această problemă?

Pentru a preveni coruperea textelor înainte de a rula importul, verifică setările din phpMyAdmin:

  • Asigură-te că opțiunea de Collation (colaționare) a bazei de date și a tabelelor destinație corespunde cu cea din sursa originală (recomandat este standardul utf8_general_ci sau utf8mb4_unicode_ci).
  • Selectează setul corect de caractere pentru fișierul SQL importat în meniul de import (de obicei UTF-8).
  • Este întotdeauna de preferat să creezi din start baza de date cu aceeași codare pentru a menține compatibilitatea deplină.

Ce poți face dacă baza de date a fost deja importată greșit?

Dacă datele au fost deja corupte în baza de date și nu ai la dispoziție o copie de rezervă nealterată, o soluție este rularea unui script de corecție sau de reimportare care să convertească textele în standardul UTF-8.

În PHP, conversia de bază se poate realiza folosind funcția utf8_encode():

<?php
$text_initial = "Acesta este un text de convertit în UTF-8";
$text_nou = utf8_encode($text_initial);
?>

Același principiu se aplică și în sens invers, pentru decodarea unui șir de caractere din UTF-8 înapoi în ISO-8859-1, utilizând funcția nativă utf8_decode():

<?php
$text_decodat = utf8_decode($text_nou);
?>

Dacă dezvolți un script automatizat pentru întreaga bază de date, poți parcurge înregistrările din tabelele afectate și actualiza câmpurile de text după aplicarea conversiei adecvate.

Lasă un comentariu