Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zmiana kodowania bazy w zależności od tabeli
Forum PHP.pl > Forum > Przedszkole
thek
Witam.
Obecnie w pracy siedzę od jakiegoś już czasu i kombinuję jak w locie konwertować przesyłane mi między skryptem a bazą dane. Problem niby z działu Przedszkole (temat kodowania jest nawet przyklejony). Problem polega na jednym szczególe. A wiadomo, że diabeł tkwi w nich.

Mianowicie przyszło mi przerobić szablon strony i zrobiłem to dla uniwersalności kodując całość w UTF-8 (takie wewnętrzne kodowanie plików, jak i odpowiednie oznaczenie w meta). Gdyby baza była również w utf-8 to problemu nie ma, ale niestety tak nie jest. Ktoś podczas zakładania pomieszał w konfigu i mam taki Sajgon:
Baza: utf-8,
System porównywania: latin1_swedish_ci
Tabele wewnątrz z charsetem: latin1

No to kombinowałem i najbliższy prawidłowego wyświetlania jest układ:
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER SET utf8"); oraz latin1
mysql_query("SET collation_connection = latin1_swedish_ci");

Tyle że wyrzuca on teksty z kodowaniem wyglądającym jak ASCII:
Ksi??ki i filmy o tematyce sportowej - instrukta?owe, dokumentalne

No to postanowiłem dodatkowo użyć iconv. Tyle że to także nie daje rezultatów.
  1. $nazwa = iconv('ISO-8859-1', 'utf-8', $row['nazwa']);

Próbowałem ustawiać różne kombinacje. Poprzez konkretne ISO, nazwy latin1, latin2.
W końcu nawet zacząłem ustawiać także wartości poprzez zdefiniowane doń funkcje:
  1. iconv_set_encoding("internal_encoding", "UTF-8");
  2. iconv_set_encoding("input_encoding", "ISO-8859-1");
  3. iconv_set_encoding("output_encoding", "UTF-8");
Też bez rezultatu. Wciąż brak polskich odpowiedników.

Jest mi to niestety potrzebne, bo w przygotowaniu stoją kolejne 2 bazy, a tam jest już nawet nie Sajgon, ale Wojna światowa, bo różne tabele w tej samej bazie mają różne collations.

Co jeszcze dziwniejsze. Gdy nie zrobię zmian nigdzie przy połączeniu z baza i nie zastosuję iconv (czyli strona w utf-8 pobiera dane tak jak są w bazie i po prostu je wyświetla nie operując na nich), to poprzez zmianę kodowania w przeglądarce z rozpoznanego utf-8 na iso-8859-2 to co pobrałem z bazy zostaje przekodowane na prawidłowe polskie znaki, ale reszta strony napisana w utf-8 oczywiście sypie krzakami. W ten sposób zgłupiałem bo nie mogę w końcu określić czy baza ma utf-8, ASCII, iso-8859-1 czy może iso-8859-2 blinksmiley.gif

Dla mnie logicznym jest, że w takim wypadku powinienem użyć iconv, ale pytanie w takim wypadku powstaje: "Jakich kodowań jako parametry użyć?. Wyjściowy na bank utf-8. Kombinacje jakich użyłem dają:
ISO-8859-2 -> utf-8: standardowe pytajniki w rombach;
ISO-8859-1 -> utf-8: standardowe pytajniki w rombach;
ascii -> utf-8: standardowe pytajniki w rombach;
Kto widzi jakieś inne kombinacje dla rozwiązania tego problemu niech da znać smile.gif
potreb
Wiesz, niedawno miałem problem z kodowaniem, admin wkońcu po 20 latach zaktualizował serwer php 5 i mysql 5, a tabele miałem w swedish_ci a kodowanie ustawione na utf, jak nie chcesz się za przeproszeniem piep... pozmieniaj kodowanie w tabelach przy pomocy Mysql Gui Tools
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.