Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kodowanie - ślepa uliczka?
Forum PHP.pl > Forum > Bazy danych > MySQL
Change
Witam, od 2 lat prowadzę pewne forum (które od startu było równocześnie startem mojej styczności z html,php,mysql i siecią), parę miesięcy temu podczas przenosin na inny serwer. Wtedy też dopiero - gdy po przeniesieniu bazy miałem krzaki zamiast polskich znaków, zleciłem to "specjaliście". Forum na vBulletin. Okazało się że kodowanie mojej bazy to latin1_swedish_ci , a wg niego konwersja tego na utf8 jest niemożliwa (siedział nad tym pare dni), bez utraty polskich znaków we wszystkich postach itp. Czy da się coś zrobić, czy już zawsze będę miał problem siedząc w tym kodowaniu?
Pozdrawiam i liczę na pozytywną odpowiedź worriedsmiley.gif
blooregard
A nie ma możliwości zmiany kodowania bazy na utf8 i ponownego importu danych?
Crozin
1. Robisz kopię zapasową bazy danych.
2. Unicode pozwala na zapisanie wszystkich znaków występujących w ISO-8859-1, tak więc nie ma problemu by zmienić kodowanie bez utraty ogonków.
3. Teraz wystarczy już tylko:
  1. UPDATE tbl_name SET col_name = CONVERT(col_name USING utf8);

4. latin1_swedish_ci to nie kodowanie tylko metoda porównywania znaków. Kodowaniem jest latin1.
Noidea
Po pierwsze musisz sprawdzić w jakim kodowani tak na prawdę masz dane w starej bazie danych. Odpal zapytania:
  1. SET NAMES latin1; -- wypróbuj również latin2, utf8 i cp1250
  2.  
  3. SELECT kolumna_z_polskimi_znakami FROM tabela WHERE id = ID_WIERSZA_KTÓRY_ZAWIERA_DUŻO_POLSKICH_ZNAKÓW

(Najlepiej zrobić to przez narzędzie typu MySQL Workbench, ale jeśli będziesz robił to przez skrypt PHP i przeglądarkę, to pamiętaj, żeby poinformować ją o kodowaniu, np:
header( "Content-Type: text/plain; charset=iso-8859-1" ); )

Jak już się dowiesz jak tak na prawdę zakodowane są twoje polskie znaki, to robisz zrzut bazy do pliku .sql, wstawiasz w pierwszej linijce:
  1. SET NAMES kodowanie; -- wstaw tu odpowiednie kodowanie z pierwszego kroku
i wczytujesz na nowym serwerze. Oczywiście nowe tabele tworzysz już w kodowaniu utf8.

Przykładowo jeśli obecnie twoje polskie znaki zakodowane są jako latin2, to zrzut bazy powinien wyglądać tak:
  1. SET NAMES latin2;
  2.  
  3. CREATE TABLE jakas_tabela (
  4. jakas_kolumna varchar(255) NULL
  5. ...
  6. ) CHARSET=utf8
  7.  
  8. ...
  9.  
  10. INSERT INTO jakas_tabela (jakas_kolumna, ...) VALUES ('tekst z polskimi znakami zakodowanymi jako latin2', ...)
  11.  
  12. ...
Change
No, spróbuję skorzystać z waszych rad, zobaczymy co będzie, bo po samym przeczytaniu to nadal czarna magia smile.gif
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.