Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam! Mam taki problem odnośnie kodowania polskich znaków w bazie mysql
Mianowicie zamiast polskich znaków mam - ?
Tylko pytajniki - żadnych innych dziwnych znaczków!
Sprawa wygląda tak że skrypt tworzący bazę to osobny plik i skrypt dodający rekordy jest w osobnym pliku ( jest to napisane w javie
ale wiadomo SQL to SQL )
Skrypty piszę w notepad++ i używam tam kodowania UTF-8.
W pliku który dodaje rekordy do bazy dołożyłem ich wyswietlanie i na ekran przeglądarki wyrzuca mi dane z polskimi znaczkami ( jest ok )
a do bazy z tych samych zmiennych dodają mi się rekordy z tymi pytajnikami )
Kod tworzenia bazy wygląda tak:
try{ Class.forName("com.mysql.jdbc.Driver"); }catch (Exception e){ System.out.println("Błąd wczytywania sterowników"); return; } String URL = "jdbc:mysql://192.168.2.181:3306/baza"; String username ="user"; String password="pass"; Statement s=null; Connection con=null; try{ con=DriverManager.getConnection(URL,username,password); s=con.createStatement(); System.out.println("Polaczenie OK - "+URL); }catch (Exception e) { System.err.println("Błąd połączenia z "+URL); } String[] SQL = { "DROP TABLE tabelka ", "CREATE TABLE tabelka ("+ "id integer NOT NULL AUTO_INCREMENT PRIMARY KEY,"+ "data varchar (32),"+ "nr varchar (128),"+ "rek1 varchar (256),"+ "rek2 varchar (256),"+ "rek3 varchar (36)) CHARACTER SET utf8 COLLATE utf8_general_ci", }; try { for (int i=0; i<SQL.length; i++) { s.executeUpdate(SQL[i]); } con.close(); } catch (Exception e) { System.err.println("Wystapil problem z wyslaniem SQL do "+URL+ ": "+e.getMessage()); }
Jak widać baza wraz z tabelami tworzy się w kodowaniu utf8_general_ci
W phpmyadmin także widzę poprawne utworzenie się bazy i tabeli w tym kodowaniu.
A skrypt dodawania:
try{ Class.forName("com.mysql.jdbc.Driver"); }catch (Exception e){ System.out.println("Błąd wczytywania sterowników"); return; } String URL = "jdbc:mysql://192.168.2.181:3306/baza"; String username ="user"; String password="pass"; Statement s=null; Connection con=null; try{ con=DriverManager.getConnection(URL,username,password); s=con.createStatement(); System.out.println("Polaczenie OK - "+URL); }catch (Exception e) { System.err.println("Błąd połączenia z "+URL); } String[] SQL = { "INSERT INTO tabelka VALUES (id, '"+wartosc123[0]+"', '"+string2[0]+"', '"+text1+"' , '"+text2+"', '"+nf.format(opcja3)+"')", }; try { for (int i=0; i<SQL.length; i++) { s.executeUpdate(SQL[i]); } con.close(); } catch (Exception e) { System.err.println("Wystapil problem z wyslaniem SQL do "+URL+ ": "+e.getMessage()); }
Dla przypomnienia dane które dodają się w insercie (wartosc123[0] itd ) przy wyświetleniu za pomocą out.print'a
wyświetlają się prawidłowo!
Ma ktoś może jakiś ciekawy pomysł??
Offline
kodowanie bazy masz w UTF-8 ?
może przed insertem daj : SET NAMES 'utf8';
Offline
Tak dokładnie - utf8_general_ci
mam SET NAMES 'utf8'
s.execute("set names 'utf8'");
pod
s=con.createStatement();
Ale dalej to samo!
Offline