Conversia bazei de date în mysql

S-ar părea că sarcina este simplă, execută pentru fiecare tabel o interogare:

ALTER TABLE ". $ tableName. 'CONVERSĂ CU CARACTER SET utf8 COLLATE utf8_unicode_ci;

și este făcut! Cu toate acestea, nu totul este atât de simplu și există următoarele puncte, pe care ar trebui să le acordați atenție:

În MySQL, pentru codificare, există 2 concepte CHARACTER și COLLATE și aici sunt 2 lucruri:

  • pentru întreaga tabelă sunt valori diferite (codarea stocării datelor în câmpuri fără a specifica codificarea și codarea comparației datelor în câmpurile din tabel)
  • pentru câmpul tabelului - aceeași valoare (codarea stocării datelor)

1. Transformați în setul de caractere pot fi extrase din datele - semne de întrebare (cu excepția cazului în noua codificare nu este susținută de simbolurile codificării vechi). Prin urmare, poate nu ar trebui să faceți conversia, ci mai degrabă să schimbați tipul de reconciliere:

ALTER TABLE ". $ tableName. 'COLLATE = utf8_unicode_ci;

2. Necesitatea de a converti numai acele tabele care nu au utf8, deoarece pot fi câmpurile de codificare din acest tabel nu sunt enumerate în mod specific utf8 (de exemplu, pentru a reduce redundanța datelor, ca utf8 sub fiecare caracter utilizează 2 octeți, nu 1 în alte codificări)

3. Cu excepția meselor în sine, trebuie să verificați codificarea câmpurilor de text, ceva de genul:

este necesar să se convertească în mod corespunzător razrulit codificări, de exemplu: utf8_bin, Latin1, utf8, o masă de probă:

este deosebit de important să convertiți câmpul utf8_bin la utf8, de exemplu, am o interogare:

Explic: utf8bin câmp a fost un unic, sensibil la caz, și am încercat să aducă la codificarea nu este acceptată cs (caz sensetive - sensibile la litere mari)

4. Vă rugăm să rețineți că deplasarea de la utf8_general_ci pe utf8_unicode_ci ne extindem tabelul de caractere, atunci nu există nici o problemă, dar ne extindem încă nu este de până la utf8_bin, astfel încât întrebarea CI cs sau rămâne deschisă.

Articole similare