mysql a kodowanie polskich znaków

pyt Q

Oczywiście mysql_query("SET NAMES 'latin2'") pomaga ale dosyć ciężko zmienić mi istniejący już kod.
Temat znany i wałkowany już nie raz. Skoro powyższe pomaga, a nie chcesz zmieniać istniejącego kodu, dodaj poniższe do konfiguracji MySQL:
init-connect = 'SET NAMES latin2' Zmiana kodu jest problemem bo jest to wiele różnych aplikacji pisanych przez różnych programistów pisane w lepszym i gorszym stylu. Po pierwsze nie mogę dłubać w cudzym kodzie po drugie jestem leniwy i szukam szybszego rozwiązania. Ale moim zdaniem jest to podstawowy problem, na który nie znalazłem dobrego rozwiązania.
init-connect = 'SET NAMES latin2' działa ale dla mnie to raczej "dirty hack" niż poprawne podejście do problemu. Problem polega na tym, że komenda z init-connect jest wymuszana przez serwer dla wszystkich klientów. A jak serwer mysql może wymuszać kodowanie znaków po stronie klienta tylko ze względu na jedną plikację jaką jest apache? A co jeśli poza php z mysqla korzystają inne aplikacje, które które zgodnie z ustawieniami w /etc/my.cnf spodziewają się np. UTF8 zamiast latin2. Co jeśli z mysqla korzysta wiele serwerów www i niektóre z nich wolałyby inny domyślny charset? Ja mam przykładowo podlinkowane tabele MySqla w bazach Access'a pod Windowsem przez ODBC. latin2 to nie jest to co Access lubi najbardziej. Inny problem: chyba każda nowa dystrybucja linuxa ma domyślnie ustawione locale z UTF8 w suffixie (i chwała im za to). init-connect = 'SET NAMES latin2 rozwala mi poprawną obsługę mysqla w shellu.
Pozdrawiam
Jarek

odp A

Mysql posiada akurat bardzo dobrą obsługę stron kodowych (baza/tabela/kolumna) i jeżeli ktoś nie potrafi tego poprawnie ustawić to jego problem. W sposób jaki opisujesz praktycznie nigdy nie dałoby się pracować na bazie. Rozwiązania są dwa i oba zostały już podane.

odp A

Mysql posiada akurat bardzo dobrą obsługę stron kodowych (baza/tabela/kolumna) i jeżeli ktoś nie potrafi tego poprawnie ustawić to jego problem. W sposób jaki opisujesz praktycznie nigdy nie dałoby się pracować na bazie. Rozwiązania są dwa i oba zostały już podane. Ależ da się bo tak mi to działa. Właśnie dlatego, że nie stosuje rozwiązań typu init-connect i jak sam piszesz obsługa stron kodowych w mysql jest zrobiona wzorowo. Problemem jest tylko php, i jego brakująca funkcjonalność obsługi grup ustawień domyślnych mysql lub chociaż opcji mysql.default-character- set w pliku php.ini. Przegladalem kod zródłowy modułu php-mysql. Na pierwszy rzut oka można to poprawić jedną linijką kodu. Myślałem jednak, że ktoś to przerabiał wcześniej i podrzuci jakiś ładny workaround.
Pozdrawiam
Jarek

odp A

Myślałem jednak, że ktoś to przerabiał wcześniej i podrzuci jakiś ładny workaround. jarek.gmail.com
Wielu osób przerabiało to wcześniej, na ogół przy migracji na 4.1/5.0, jednak do tej pory słyszałem jedynie o wspomnianym przeze mnie "nieładnym" rozwiązaniu.
Jeśli w Twoim środowisku jest to uzasadnione, a problem dotyczy tylko starych aplikacji PHP, patch na bibliotekę klienta MySQL nie jest głupim pomysłem, choć bardziej kłopotliwym z administracyjnego punktu widzenia.
Pozdrawiam, Adam

Dodaj odpowiedź

Tytuł:

Mail: (w celu weryfikacji posta)