wtorek, 2 czerwca 2009

Migracja bazy MySQL a kodowanie znaków.

Problem związany z migracją bazy danych ze starego MySQL na nową bazę.
Export mamy w Latin2, a u nowy MySQL działa w zupełnie innej stronie kodowej.

Odpalamy:

show variables like 'character%' ;

jako resultat (lub bardzo podobne):
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin2 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

Jak widać wszystko działa jako Latin1 w zasadzie.

Teraz musimy to wszystko zmienić na Latin2 - aby to zrobić należy użyć polecenia:

* set session ___co___=latin2; ===> jeżeli chcemy dla sesji
* set global __co__=latin2; ===> jeżeli chcemy globalnie -- ale tutaj uprawnienia potrzebne są

a więc:

set session character_set_client=latin2 ;
set session character_set_connection=latin2 ;
set session character_set_database=latin2 ;
set session character_set_results=latin2 ;
set session character_set_server=latin2 ;

i teraz mamy:

show variables like 'character%';

+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin2 |
| character_set_connection | latin2 |
| character_set_database | latin2 |
| character_set_filesystem | binary |
| character_set_results | latin2 |
| character_set_server | latin2 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

... no tu juz jesteśmy prawie w domu - teraz jeszcze trzeba usunąć co nieco.

Przełączamy się na bazę danych:

use nasza_db ;

i usuwamy:

drop table students;
drop table test01;
drop table students_tests;

a następnie importujemy jeszcze raz importujemy dane do bazy:

source test01.sql;

teraz jak damy sobie zapytanie:

select * from test01 limit 1;

powinniśmy mieć już polskie znaki na ekranie ... kolejna sprawa to jak zachowuje sie skrypt

do poszukania - plik inc/common.php

tam jest metoda:

function DB($DB_NAME, $DB_HOST, $DB_USER, $DB_PASS)

i teraz za: $this->connected = 1; wspisujemy to

mysql_query('set session character_set_client=latin2 ');
mysql_query('set session character_set_connection=latin2 ');
mysql_query('set session character_set_database=latin2 ');
mysql_query('set session character_set_results=latin2 ');
mysql_query('set session character_set_server=latin2 ');

i powinniśmy mieć polskie znaki.

Brak komentarzy:

Prześlij komentarz

Archiwum bloga