MySQL, Java, Linux i polskie znaki

0

Witam,

piszę w Javie program zaczytujący dane z bazy i wpisujący je do pliku oraz na ekran (przez webserwis).
Mam poważny problem z polskimi literami. Nie jestem w stanie dojść w jakim formacie je otrzymuję,

			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://192.168.1.100/umk?user=***&password=***");
			stmt = conn.createStatement();
			stmt.execute("set names 'utf8'");
			stmt.executeQuery("select id, nazwa, from moja_tabela");
			rs = stmt.getResultSet();

W miejsce polskich liter mam znaki zapytania. "Zażółć gęślą jaźń" -> ani jedna polska litera się nie zachowała.
Polecenie wydane w konsoli (env |grep LANG) zwraca "LANG=pl_PL.UTF-8".

Próbowałem również konstrukcji:
stmt.executeQuery("select id, convert(nazwa using 'utf8') naz from moja_tabela");

Eksperymentowałem z "set names". dawałem "latin2", "latin1", "cp1250" i jeszcze kilka innych, z którymi kiedykolwiek miałem do czynienia. Ani razu nie zobaczyłem ani jednego polskiego znaku. Dane w tabeli zapisane są w Windows-1250.

Gdy czytam za pomocą PHP z tej samej tabeli używam "set names 'latin2'" i nic więcej nie muszę robić. Strona jest oczywiście w "iso-8859-2".

Jak uzyskać polskie znaki ?

0

Jeżeli trzymasz dane w CP1250, a chcesz wrzucać utfy to raczej nie najlepszy pomysł.
http://www.webservertalk.com/archive277-2004-12-624435.html

0

No cóż, widać MySQL nie radzi sobie z konwertowaniem danych z Windows-1250 na UTF-8.

Ale to trochę dziwne. Domyslnie dump z MySQL-a wykonywany jest w formacie UTF-8 a po odtworzeniu danych z dump-a baza jest poprawna.

mysqldump -u *** -p*** mojabaza > dump.sql

polecenie wydaję tym razem w środowisku Windows XP. Zapis polskich liter jest poprawny.

0

Jest Dobrze ponieważ WXP domyślnie pracuje w CP1250 i jeżeli wykonujesz dumpa to w rzeczywistości mysql wypluwa UTF8, system myśli że jest to CP1250 po czym do pliku trafia CP1250. Jeżeli wgrywasz dumpa to w praktyce na bazę w CP1250 wgrywasz CP1250.

Rozwiązanie problemu zmienić kodowanie na ISO lub utfa

0

Serdecznie dziękuje Koziołku :)

skonfigurowałem instancję MySQL tak, aby baza pracowała i domyślnie używała kodowania UTF-8.
Teraz wszystkie polskie znaki pokazują się poprawnie.
Eksperymentalnie zrobiłem kopię bazy, ale tym razem dane char i varchar zapisałem w utf8_polish_ci.
Wyniki są poprawne i tu i tu (cp1250 i utf).
Z mojego eksperymentu wniosek jest taki: ważna jest konfiguracja instancji MySQL a dane można zapisywać jakkolwiek.

Jeszcze raz dziękuję za pomoc i pozdrawiam :)

0
lszota napisał(a)

skonfigurowałem instancję MySQL tak, aby baza pracowała i domyślnie używała kodowania UTF-8.
Teraz wszystkie polskie znaki pokazują się poprawnie.
Z mojego eksperymentu wniosek jest taki: ważna jest konfiguracja instancji MySQL a dane można zapisywać jakkolwiek.

Czy mógłbyś rozwinąć w jaki sposób poprawnie skonfigurować instancję?

Pozwoliłem sobie podłączyć się pod wątek. bo mam bardzo podobny problem na z MySql na Windows i aplikacją w C#.

Polskie znaczki są prawidłowo przekazywane do i z formularzy, natomiast select w MySqll query browserze pokazuje jakieś krzaki, to samo jest po wykonaniu dumpa do pliku.

Zastanawiam się co bedzie jak z bazy zaczną korzystać inni klienci.

pozdrawiam

Tomek.

0

Zainstalowałem MySQL korzystając ze standardowego instalatora.
Po zakończeniu instalacji aplikacji uruchamia się kreator konfiguracji instancji. Zakładam, że masz to już za sobą, więc możesz go uruchomić jeszcze raz korzystając z menu Start (Start->MySQL->MySQL Server 5.0->MySQL Server Config Wizard).
W jednym z kroków kreator prosi o wybranie domyślnego sposobu kodowania znaków. Z tego co pamiętam to proponuje domyślnie latin1, co w polskich warunkach nie jest ciekawym rozwiązaniem.
Wybrałem UTF8 i to rozwiązało mój problem.

To samo można ustawić w pliku my.ini znajdującym się w katalogu instalacji serwera:

[mysql]
default-character-set=utf8

0

Sorki, chyba zbyt szybko czytałem Twojego posta i odpowiadam nie na temat

Spróbuj innej aplikacji: SQLyog (do pobrania z http://www.webyog.com/). Osobiście korzystam z bezpłatnej wersji community. Jest całkowicie wystarczająca. Również bez problemu działa pod 64-bitowym OpenSUSE 10.3 na standardowym wine.
Korzystałem kiedyś z MySQL Query Browser-a, ale zrezygnowałem z niego. Nie pamiętam już dokładnie dlaczego, ale nie szukałbym innych rozwiązań, gdyby to było zadowalające.

Co do plików, to będziesz widział krzaczki, chyba, że:

  1. podczas wykonywania SELECT z przeznaczeniem do zapisu ustawisz: SET NAMES 'cp1250' i wtedy otrzymujesz zmienne łańcuchowe przekonwertowane do strony windows-1250.
  2. będziesz oglądał / edytował te pliki korzystając z edytora programistycznego, potrafiącego rozpoznać użytą stronę kodową. Prawdopodobnie otrzymujesz wszystko w utf-8. Spróbuj podglądnąć pliki korzystając chociażby z przeglądarki internetowej ustawiając w menu Widok kodowanie na utf-8.

1 użytkowników online, w tym zalogowanych: 0, gości: 1