Conversia bazei de date MySQL de la cp1251 la utf-8 (profesori de limba spaniolă)

În ciuda faptului că acum folosesc aproape universal UTF-8, chiar se întâmplă, uneori, un amuzant cazuri cu codificări.

Recent, m-am confruntat cu problema de acest fel. serverul de baze de date se execută pe cp1251. Codificarea baza de date și toate tabelele sale - UTF-8. Pe serverul Web care rulează o aplicație în PHP, care este exploatată cu informațiile din baza de date este, de asemenea, în UTF-8. Problema este că serverul de web variabilele de mediu, de asemenea, a stat de codificare cp1251. Serverul de baze de date comunica cu clientul bazei de date, gândindu-se că ambele dintre ei lucrează cu informații codificate în cp1251, deși, de fapt, informația a fost în UTF-8. Prin urmare, nu a fost observat nici o problemă atâta timp cât serverul de baze de date nu este conectat un client care a vrut să comunice într-o altă codificare decât cp1251. Clientul a primit nimic, dar nu și textul în codificare solicitat.

Pentru a remedia situația, în aplicația web a avut imediat după conectarea bazei de date pentru a specifica dorită de codificare de interogare „SET CARACTERE SET«utf8»“. Rămâne de a codifica date.

Mai întâi se scoate groapa de gunoi din baza de date, care solicită date codificate în cp1251. De fapt, ei vor fuziona în codificarea care a fost utilizat de o aplicație web. În acest caz, este UTF-8.

Crearea unei baze de date MySQL în groapa de comenzi cp1251:


De la haldei elimină simultan toate liniile care încep cu caracterele „/ *“ - o directivă care definește setările de codificare pentru import-export.

Acum vom rula clientul consola, și de a crea o bază de date goală în UTF-8:


Rămâne de a alege codificarea, în care informația este stocată în groapa de gunoi și umple o groapa de salvat anterior în noua bază de date. În cazul nostru, acest lucru este din nou un UTF-8.


Acum puteți alege clientul care codificare, care se află în terminal, și pentru a vedea textul. În cazul meu, care codifică KOI8-R a fost stabilit în terminal:


Dacă este făcută corect, puteți repeta recuperarea haldei este baza principală și eliminați baza de date eșantion:

Cei care nu au acces la o consolă (coajă, ssh), puteți utiliza soluția PHP: