Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: latin2 -> latin1
Forum PHP.pl > Forum > Bazy danych > MySQL
Sputnik
Witam!

Przenoszę bazę na inny serwer i mam problem z kodowaniem.
Przeczytałem już kilka tekstów w sieci z tym związanych, jednak wszystkie metody jakich użyłem okazały się niewystarczające. Albo ja to źle robiłem ...

Przedstawię ogólną konfigurację:
Baza przenoszona z Serwer1 na Serwer2.
Serwer1
Ustawienia na stronie głównej phpmyadmin(2.6.4-pl2) :
Cytat
System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
System porównań dla połączenia MySQL: utf8_general_ci

Zabytanie do bazy:
Kod
SHOW VARIABLES LIKE "character_set%";

zwraca:
Cytat
character_set_client  utf8
character_set_connection  utf8
character_set_database  latin2
character_set_results  utf8
character_set_server  latin2
character_set_system  utf8
character_sets_dir  /usr/share/mysql/charsets/

Serwer2
Ustawienia na stronie głównej phpmyadmin(2.6.1):
Cytat
System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
System porównań dla połączenia MySQL: utf8_polish_ci

Zabytanie do bazy:
Kod
SHOW VARIABLES LIKE "character_set%";

zwraca:
Cytat
character_set_client  utf8
character_set_connection  utf8
character_set_database  latin1
character_set_results  utf8
character_set_server  latin1
character_set_system  utf8
character_sets_dir  /usr/share/mysql/charsets/

W obec takch ustawień, jakie kroki powiniennem poczynić, aby kodowanie na Serwer2 było prawidłowe?
Przy wgrywaniu bazy z poziomu phpmyadmin, jaki zestaw znaków dla pliku wybrać?
Z góry dziękuję za pomoc.
Tom:-)
Mam ten sam problem. Potrzebuję przejść z bazy MySQL z latin2 na latin1. Czy ktoś zna sposób?
tosiek
Nie lepiej żebyście zostali w latin2 i wymusili na każdej bazie na którą się przeniesiecie latin2 ? poprzez mysql_query w plikach łączących się z bazą jeśli skrypt nie ma opcji zmieniania kodowania smile.gif
tommy4
stestuj na początku połączenia do bazy

  1. SET NAMES kodowanie


gdzie kodowanie, latin1, latin2 lub utf8.
Tom:-)
tosiekWszystko ok ale jak się kursuje między hostami albo robi się często aktualizacje przy kilkudziesięciu skryptach to lepiej skonwertować bazę pod danych host. Aktualizując pliki php tylko je nadpisujesz a nie nie grzebiesz w kodzie co wydłuża czas. Polska powinna mieć ustalony standard dla naszych znaków. Jak mam portal po ang to może być baza wszystko jedno jaka. Tam nie jest ważne kodowanie chyba że są szczególne znaki. Powinno to być ujednolicone albo powinien ktoś sporządzić tools. Z tego co się zorientowałem nie ma takiego do dużych baz danych MySQL dlatego nasza firma jest już zajęła się tym tematem i tworzymy przydatne darmowe narzędzie
tosiek
Hmm dla mnie np. wygodniej ustawić sobie bazę ( host ) pod własne wymagania niż przerabiać - konwertować całą bazę. Bo może się to skończyć utratą znaków polskich, z reguły konwersji używa się do naprawy baz gdzie występuje wiele kodowań ( ale z reguły ręcznie) czyli do ratowania bazy. Do konwersji możesz spróbować użyć gżegżółki
http://www.gzegzolka.com/

Ale i tak wolę dodać w pliku łączącym się z bazą jedną linijkę niż przerabiać 70 baz danych.
Wywołujesz SET NAMES przez mysql_query i baza jest ustawiona pod twoje wymagania winksmiley.jpg
Jakby co w dokumentacji masz dużo o ustawieniach: http://dev.mysql.com/doc/refman/5.0/en/cha...connection.html

Ale i tak polecam "przestawić" nową baze na latin2:
wstaw pod:
Cytat
$dbselect = mysql_select_db($this->dbname);

to:
Cytat
mysql_query('SET NAMES latin2 COLLATE latin2_general_ci', $this->db_connect_id);


Oczywiście $dbselect będzie się różnić smile.gif Ale zostajecie we własnym kodowaniu smile.gif

A żeby przestawić baze na latin2 możecie wejść w operacje >> system porównania na latin2_general_ci
lub wykonać zapytanie:
Cytat
ALTER DATABASE `nazwa_bazy` DEFAULT CHARACTER SET latin2 COLLATE latin2_general_ci;

za `nazwa_bazy` wstawcie nazwę bazy (przydałoby się narzędzie które by zmieniało dla istniejących tabel )
I macie przestawioną bazę na latin2 i każda tabela jaka wgracie będzie miała kodowanie latin2 i tylko będzie brakować mysql_query

Przy aktualizacji skryptu z reguły plików łączących z bazą się nie zmienia więc zawsze gdzie przeniesiesz ten plik takie kodowanie przyjmie baza podczas połączenia. No i trzeba tez przestawić bazę co zajmie 30sec roboty

PS wykonjcie sobie zapytanie:
Cytat
SET NAMES latin2 COLLATE latin2_general_ci;
SHOW VARIABLES LIKE 'character_set%';

I
Cytat
SET NAMES latin2 COLLATE latin2_general_ci;
SHOW VARIABLES LIKE 'collation%';


To zobaczycie jak ładnie ustawia waszą bazę smile.gif
Tom:-)
tosiek gżegżółki nie ma latin1
tosiek
A iconv ?
http://www.gnu.org/software/libiconv/
Poczytaj na google więcej, sam dokładnie nie umiem się tym posługiwać smile.gif

Ps tez jest wersja pod Windowsa smile.gif
http://gnuwin32.sourceforge.net/packages/libiconv.htm
Tom:-)
tosiek iconv - nie przerobi dużych baz dlatego tworzymy własny tools
tosiek
To życzę wam powodzenia smile.gif Ale kurde coś musi obsługiwać (konwerter) latin1 ;/
Tom:-)
Właśnie są problemy. Sami jeszcze nie wiemy jakie ma być wspólne kodowanie ale na razie zostanie utf-8
tosiek
Kurcze zostańcie na latin2 lub utf8... dajcie sobie spokój z latin1 bo tam nie ma polskich znaków tongue.gif

Zobacz taka tablicę :
z latin1 na latin2:
Cytat
//$arrRemove = array('ê', 'ó', '±', '¶', '³', '¿', '¼', 'æ', 'ñ', 'Ê', 'Ó', '¡', '¦', '£', '¬', '¯', 'Æ', 'Ñ');
//$arrInsert = array ('ę', 'ó', '±', '¶', 'ł', 'ż', 'Ľ', 'ć', 'ń','Ę','Ó','ˇ','¦','Ł','¬','Ż','Ć','Ń');


Moze sie przyda bo nie znam się na php smile.gif Ale tablice sam zrobiłem tongue.gif

PS pamiętaj że liczy się wielkość liter i cyfr smile.gif
misiek172
ja nie rozumiem główkowania, według mnie najlepszy jest UTF-8 Nie trzeba męczyć się w żadne znaczki jak przy latin2. Nigdy się nic nie krzaczy, pod każdą przeglądarką wyświetlane jest dobrze. Więc po co kombinować?
Tom:-)
I dlatego nasz tools w pierwszej wersji będzie przekonwertowywał do UTF-8
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.