hi,
i am trying to write utf-8 data via java into sql but it wont work as expected.
first my setup
- suse 9.0 - kde 3.2
mysql> SHOW VARIABLES LIKE 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_server | utf8 | | character_set_system | utf8 | | character_set_database | utf8 | | character_set_client | utf8 | | character_set_connection | utf8 | | character-sets-dir | /usr/share/mysql/charsets/ | | character_set_results | utf8 | | version | 4.1.1-alpha-standard | | version_comment | Official MySQL RPM | | version_compile_machine | i686 | | version_compile_os | pc-linux | | wait_timeout | 28800 | +--------------------------+----------------------------+
now i have the following script
[code]
[EMAIL PROTECTED]:> more example_insert.sql
insert into CTPE_V01_00.CUSTOMER (ID, FAMILY_NAME, GIVEN_NAME)
values ('01', 'K��sel', 'B�b');
insert into CTPE_V01_00.CUSTOMER (ID, FAMILY_NAME, GIVEN_NAME)
values ('02', '�g�l', '�lb�rt');
insert into CTPE_V01_00.CUSTOMER (ID, FAMILY_NAME, GIVEN_NAME)
values ('03', '???????????', '???????????');
[/code]
which i execute and afterwards display is completely ok
[code] mysql < example_insert.sql
mysql> use CTPE_V01_00; mysql> select FAMILY_NAME, GIVEN_NAME from CUSTOMER; +------------------------+------------------------+ | FAMILY_NAME | GIVEN_NAME | +------------------------+------------------------+ | K��sel | B�b | | �g�l | �lb�rt | | ??????????? | ??????????? | +------------------------+------------------------+ 3 rows in set (0,00 sec)
mysql> [/code]
now i want to do that with java code instead. i tried the following connectors
- mysql-connector-java-3.0.12-production-bin.jar - mysql-connector-java-3.1.1-alpha-bin.jar
here's my code
[code]
public void testMySql()
{
String url = "jdbc:mysql://localhost/" +
"?autoReconnect=true" +
"&useUnicode=true" +
"&characterEncoding=utf8";String cls = "com.mysql.jdbc.Driver"; String user = "..."; String pwd = "...";
execute(url, cls, user, pwd); }
public void execute(String _con, String _class, String _user, String _pwd){ Connection con; Statement stmt; try{ Class.forName(_class);} catch (java.lang.ClassNotFoundException e){ System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage());}
try{
String sql1 = "insert into CTPE_V01_00.CUSTOMER " +
"(ID, SHORT_ID, FAMILY_NAME, GIVEN_NAME) " +
"values ('01', '01','K��sel', 'B�b');";
String sql2 = "insert into CTPE_V01_00.CUSTOMER " +
"(ID, SHORT_ID, FAMILY_NAME, GIVEN_NAME) " +
"values ('02', '02','�g�l', '�lb�rt');";
String sql3 = "insert into CTPE_V01_00.CUSTOMER " +
"(ID, SHORT_ID, FAMILY_NAME, GIVEN_NAME) " +
"values ('03', '03','???????????'," +
" '???????????');"; con = DriverManager.getConnection(_con, _user, _pwd);
stmt = con.createStatement();
stmt.executeUpdate(sql1);
stmt.executeUpdate(sql2);
stmt.executeUpdate(sql3);
stmt.close();
con.close();}
catch (SQLException ex){
ex.printStackTrace();}}[/code]
now this results in the following output on the console
[code]
mysql> select FAMILY_NAME, GIVEN_NAME from CUSTOMER;
+----------------------------------------------+----------------------------------------------+
| FAMILY_NAME | GIVEN_NAME |
+----------------------------------------------+----------------------------------------------+
| Kä�sel | Böb |
| �gÿl | �lbért |
| ин�е�на�ион | ин�е�на�ион |
+----------------------------------------------+----------------------------------------------+
3 rows in set (0,00 sec)
[/code]
<sigh> not exactly what i expected.
what is also interesting is if i use DBFace (a eclipse plugin) in combination with the drivers i mentioned the result is better - it is not correct but it is better (not so much garbage).
any help is greatly appreciated.
tia
ciao robertj
smime.p7s
Description: S/MIME Cryptographic Signature
