Transferarea bazei de date din versiunile anterioare ale mysql în mysql-4.1 fără probleme de codificare
Atunci când actualizați baza de date mysql din versiunile anterioare la versiunea 4.1, mulți se confruntă cu problema codării biților. Acest lucru se întâmplă deoarece în 4.1 se folosește numai utf-8 și toate simbolurile din gropile de gunoi sunt transformate în acesta. Asta înseamnă că, dacă ai avea o criptare în codificarea ferestrelor-1251. atunci când îl importați în mysql-4.1, va fi transferat la utf-8 și va fi imposibil să restabiliți textul.
Soluția este de a spune mysql despre ce codificare va fi de import text în. Pentru a înțelege mai bine cum se face aici este un exemplu pentru baza de date la care nu aveți acces, cu excepția interfață MySQL. De exemplu, poate fi gazdă străină.
Să presupunem că avem un depozit sql al tabelului my_win1251_table. Codificarea sa este windows-1251. Adăugăm linii la începutul fișierului, care va schimba valoarea variabilelor pentru sesiunea mysql. Se pare:
Acum vom umple depozitul în baza de date mysql-4.1
Dacă vă uitați acum la dump din baza de date mysql-4.1, acesta va arăta astfel:
Rețineți că în INSERT textul câmpului este acum în format utf-8. Și este mai mult decât originalul, deoarece utf-8 cheltuiește doi octeți per caracter. De aceea, atunci când imprimați acest text pe pagina html, vor apărea semnele de întrebare.
Acordați atenție doar textului noului depozit CREATE TABLE. DEFECȚIUNEA DEFAULT = cp1251; În mysql-4.1, a apărut parametrul charset. care este atribuită atât bazei de date, cât și fiecărui tabel individual.
Pentru a realiza nu numai intrarea de date corecte, dar, de asemenea, trebuie să spun de ieșire MySQL bazat pe faptul că dorim să obțineți de la ea datele din ferestre-1251. în care comanda "SET NAMES cp1251;" ne va ajuta.
Soluții globale ale problemei
Exemplul de mai sus este disponibil pentru oricine are acces la interfața mysql. Dar dacă aveți drepturi de root pe server, puteți încerca anticiparea problemei cu codificări în avans.
Pentru aceasta, în /etc/my.cnf se pot scrie următoarele:
În plus, totul a funcționat bine pentru mine și fără init-connect. dar această linie ajută foarte mult.
Puteți compila, de asemenea, mysql cu parametrii de configurare
"- cu-charset = cp1251 - cu-collație = cp1251_general_ci"
Variabilele mysql-4.1 și comportamentul ciudat al comenzii "SET NAMES cp1251;" și "SET SETTING CHARACTER SET cp1251;"
Pe Internet o cantitate mare de informații cu privire la această problemă, dar aproape fiecare răspuns este pe placa de comandă set SET cp1251 DENUMIRI; și setul de caractere SET cp1251; după conectare. Iată un exemplu de sesiune mysql, care arată clar că mysql-4.1 modifică numai o parte din variabile atunci când execută aceste comenzi.
Documentația spune că SET NAMES modifică variabilele character_set_client. character_set_results. character_set_connection. dar, de fapt, variabila caracter_set_connection rămâne aceeași. De asemenea, este scris acolo că SET CHARACTER SET modifică variabilele character_set_client. character_set_results. collation_connection. dar de fapt collation_connection rămâne același.
Iată un exemplu de înlocuire manuală a tuturor variabilelor posibile:
După cum puteți vedea, acum totul este normal. Nu înlocuiți variabila "character_set_system". este responsabil pentru codificarea internă a bazei de date și va fi întotdeauna utf-like.