Conversia mysqlului de la codarea latin1 sau cp1251 și toate datele sale în baza de date cu date în utf-8

Uneori, când importem o bază de date terminată, ne confruntăm cu necesitatea de a modifica codificarea (fie cp1251 sau latin1 sau altceva) pe utf8. În acest caz, trebuie să modificați codificarea bazei de date MySQL și toate tabelele și câmpurile sale. Manual, desigur, este o pierdere proastă de timp. Cum pot configura afișarea datelor din baza de date în codarea corectă?







Metoda 1. Dacă nu există timp pentru a intra, trebuie să o faceți repede!

Să presupunem, de exemplu, că tabelele noastre din baza de date au codare latin1. iar datele sunt cp1251. Facem următoarele:
- exportați baza de date cu codarea latin1;
- (*) Conversia datelor (a se vedea exemplele de scripturi iconv de mai jos) de la cp1251 la utf8; (dacă datele sunt fără caractere rusești, probabil că puteți săriți);
- vom înlocui în dump tot ceea ce este legat cu latin1 pe utf8 prin căutarea și înlocuirea în masă în întreaga bază de date;
- creați o nouă bază de date în utf8 sau ștergeți toate tabelele din baza de date veche;
- Am implementat (importa) memoria deja cu datele din utf8 într-o nouă bază de date.

* - Următorul script găsește toate fișierele din directorul curent cu extensia * .java. le transcodează în UTF-8 și copiază rezultatele în folderul res

transcodarea tuturor fișierelor din director cu înlocuirea acestora

sau fișiere de tipul solicitat și recursiv (în fișierele txt exemplu):

sau așa (transcodarea recursivă a tuturor fișierelor html):

Metoda 2. Vreau să înțeleg ce este!

Codurile bazei de date MySQL - sunt corecte - cele care ne sunt potrivite și cele greșite - de care nu avem nevoie. Dacă aveți un site în limba rusă, iar baza dvs. de date este codificată latin1, aceasta înseamnă a doua opțiune - nu ne place această codificare. Asta este, avem nevoie de un alt codare - cp1251 (nativ codare windose) sau utf-8 (acum câștigă rapid impuls în utilizare). De ce, în cele mai multe cazuri, se utilizează Latin1 - iar motivul este, probabil, faptul că MySQL este la setarea implicită specifică de codare Latin1 pentru baza de date nou creată, și, probabil, pentru că dezvoltatorii trăiesc și kodyat în Suedia. În cazul în care instalarea și / sau configurația nu deranjez să se schimbe, astfel încât acesta va rămâne implicit (de altfel, puteți lua, probabil, nota - în cazul în care Hoster dvs. creează dvs. implicite de codificare a bazei de date pentru a Latin1 se poate presupune că el nu a schimbat implicit, și este la rândul său, poate indica un nivel scăzut de abilități sau prea leneș, care, de asemenea, este foarte rău ...). Dar problema nu este implicită și gazdă, ci în posibile probleme. Da, site-ul va funcționa și textul va fi afișat în mod normal - dar, de exemplu, când căutați, nu va fi exact ceea ce cereți.







Am intrat în problema codificării greșite atunci când am instalat joomla, de asemenea, atunci când m-am mutat de la un server la altul tracker de date torrent, de fapt, oriunde a fost inițial configurat incorect.

Dacă mergeți să citiți documentația, atunci putem presupune că avem nevoie de asta

Dacă doriți să modificați tabelul, setul de caractere implicit și toate coloanele de caractere (CHAR, VARCHAR, TEXT) la un nou set de caractere, utilizați o instrucțiune după cum urmează:

ALTER TABLE tbl_name CONVERT LA CHARACTER SET charset_name;

Dar dacă citiți mai departe

Avertisment: Operația anterioară. Aceasta nu este ceea ce doriți dacă aveți o coloană într-un set de caractere (ca latin1), dar valorile stocate utilizează de fapt un alt set de caractere incompatibile (cum ar fi cp1251). În acest caz, pentru fiecare astfel de coloană trebuie să faceți următoarele:

ALTER TABLE t1 MODIFICARE c1 c1 BLOB;
ALTER TABLE t1 MODIFICARE c1 c1 TEXT CHARACTER SET cp1251;

Adică, pur și simplu nu putem converti nimic, mai întâi trebuie să vedem date binare. Asta e tot ce este posibil. Dar! Trebuie să executați această interogare pentru fiecare coloană din fiecare tabel. Dacă faceți acest lucru manual, puteți rupe cheile atâta timp cât trebuie să scrieți interogări.

După o lungă căutare și chin, versiunea finală arată astfel:

1. Învățăm în ce codificare datele noastre se află în baza de date
Deschideți phpmyadmin, selectați baza de date și consultați coloana Comparație pentru tabele - în cazul meu este latin1_swedish_ci.
Asta este, am latin1_swedish_ci (suedez, insensibil la registru) - de ce ar trebui să stochez date în codul suedez pentru un site în limba rusă?

2. Salvați dump-ul (backup) în codarea latin1
Aceasta trebuie făcută astfel încât carnea să nu poată fi citită. Se face în consola server

utilizator - numele de utilizator pentru accesarea bazei de date
parola - parola acestui utilizator
bdname - numele bazei de date pentru care suntem de dumping
- set de caractere predefinite = latin1 atenție specială la această cheie - după semn este la fel de necesar să scrie codificarea bazei de date.

3. Transcodarea dump-ului în codificarea dorită și cu parametrii necesari

Cheile sunt după cum urmează:
-f ISO-8859 - pentru a converti de la codificare ISO-8859 (vă puteți întreba de ce-ISO 8859-1 în loc de Latin1, pentru că este același lucru, și să păstreze în minte că s-ar putea fi o codificare diferită)
-t UTF-8 - în codarea UTF-8
dump_bdname.sql - fișierul pe care îl vom converti
dump_bdname_utf8.sql - rezultatele vor fi scrise în acest fișier
Cu această comandă, tot ceea ce este în latin1 este rescris în utf8.
De asemenea, în caz de probleme, puteți rula cu opțiunea -c (săriți caractere nevalide pe ieșire).

(Opțiunea pentru Vindovs - poate fi deschis prin Notepad ++ exemplu click selectați toate (Ctrl + A), se taie (Ctrl + X), apoi selectați Codificări -. Converti la UTF-8 insert (Ctrl + V))

4. Aranjarea caracterelor DEFAULT CORECT
Așa că avem o groapă, iar în codificare avem nevoie. Dar, de asemenea, a scris directive directivelor SET NAMES; și codul DEFAULT CHARSET;
Rularea urmatoarei comenzi inlocuieste toate referintele la latin1 pe utf8 din dump

(o opțiune pentru Windows - din nou în Notepad ++ prin căutarea pentru a găsi și a înlocui toate latin1 cu utf8)

5. Restaurarea bazei de date din dumpul convertit
Această comandă se completează, așa cum trebuie să ne aruncăm în tabelul nostru nou (pe care trebuie să-l creăm mai întâi)

Apoi, puteți utiliza în siguranță baza noastră de date, care este acum în codificarea corectă.

PS: Acest lucru este posibil dacă aveți acces la serverul shell (ssh).

Salutări! Inscripțiile rusești în subsol sunt făcute cu ajutorul unui modul sau în corpul unui șablon?







Articole similare

Trimiteți-le prietenilor: