Java, MySQL i kodowanie znaków

0

Witam!

Jak już w innym poście pisałem - jestem zielony z Javy więc pytanie które zadam do ambitnych nie należy. Nie znalazłem nic na forum w interesującym mnie temacie więc piszę.

Napisałem takie coś:

import java.sql.*;

public class sqlReplica {

    public static void main (String[] args)
    {
        Connection mysql = null;
        String myuser = "root";
        String mypass = "";
        String myurl = "jdbc:mysql://localhost:3306/test";

        try
        {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            mysql = DriverManager.getConnection (myurl, myuser, mypass);

            System.out.println ("Połączenie z bazą nawiązane");
        }
        catch (Exception e)
        {
            System.err.println ("Nie mogę się połączyć z bazą: " + e);
        }
        

        try
        {
        	String myQuery = "INSERT INTO tabela (name, company, country) VALUES ('ąęółżźśćń', 'ęóął', 'ŚĄŁÓĘŹĆŃ')";
        	Statement myStmt = mysql.createStatement();
        	int myrs = myStmt.executeUpdate(myQuery);
       		System.out.println ("Rekordy wprowadzone: " + myrs);        		
        }
        catch (Exception e)
        {
            System.err.println ("Nie mogę wykonać zapytania: " +  ". "+ e);
        }
        finally
        {
            if (mysql != null)
            {
                try
                {
                    mysql.close();
                    System.out.println("Połączenie z bazą zakończone");
                }
                catch (Exception e) { 
                	System.err.println ("Błąd: " + e);
                }
            }
        }
    }
}

no i w zasadzie działa, poza jednym szczegółem: wywalają się polskie znaki (w bazie).

Plik z kodem Javy ma kodowanie utf-8, baza też, tabela i pola w bazie także. Serwer obsługuje UTF-8 (PHP nie robi problemów). Używam Eclipse'a v3.2.1 pod Windowsem XP. W czym tkwi problem?

0

zanim zaczniesz robić INSERT zrób set names =utf-8 czy jakoś tak. Powinno pomóc. Problem zdarza się czasami w MySqlu i polega na tym, że strumień wejściowy z treścią zapytania nie jest traktowany jako utf, ale jako ASCII :)

0

1)Nie uzywaj MySQL bo to zlo [diabel] (PostgreSQL rulez) - mysle ze szybko przekonasz sie dlaczego (szybko czyli jesli bedziesz probowal zrobic cos wiecej niz SELECT/INSERT :P)

2)w connectionStringu dodaj "?useUnicode=true&characterEncoding=UTF-8"

napisz, czy pomoglo.

pozdrawiam

0

Tuż przed moim insertem dodałem to:

String setNames = "SET NAMES 'utf8'";
Statement setNamesStmt = mysql.createStatement();
setNamesStmt.executeUpdate(setNames);

Niestety, nie pomogło. A dziwne, bo w przypadku tego co robię w PHP to to właśnie jest remedium na wszystkie problemy z UTF-em (przynajmniej w MySQL'u).

Problem rozwiązało to co zaproponował eximius, czyli dopisanie do connectionString

?useUnicode=true&characterEncoding=UTF-8

Dzięki chłopaki!

P.S. Co do tematu MySQL vs PostgreSQL - zgadzam się, ale:
1> rzeczy, które na codzień robię można zrobić nawet na Accessie (tfu!) ;-), ale faktycznie wolę Postgresa - ma bardzo dobrą licencję (w przeciwieństwie do MySQLa),
2> do nauki Javy nie będę instalował na laptopie z Celeronem WinXP Postgresa (leń jestem), tym bardziej, że za tydzień-dwa będę musiał zrobić mu format c: i zreinstalować od zera
3> wybór baz niekiedy ograniczają klienci lub providerzy serwera.
Na tym proponuję zakończyć dyskusję o przewagach jednych baz nad drugimi bo to temat na inny wątek...

Jeszcze raz dziękuję za pomoc i obiecuję, że jeszcze Was pomęczę! ;-)

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