my dog learned polymorphism*
The moose likes JDBC and the fly likes Can't write UTF8 chars Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Databases » JDBC
Bookmark "Can Watch "Can New topic
Author

Can't write UTF8 chars

Eran Kaplan
Greenhorn

Joined: Aug 27, 2009
Posts: 8
Hi all,

I don't succeed to write to my MySql db with UTF-8.
I can read Characters in UTF-8 but I can't write.
If I try to save aaaéaaa, I get in my db browser (Navicat) aaa?aaa.
With my DB browser I can read and write aaaéaaa freely.


I tried anything I can think of:
• Start mysql server with --character-set-server=utf8
• Define a new table with only UTF8 columns
• Use the JVM flag -Dfile.encoding=utf8
• Compile with: javac -encoding UTF-8
• connection url: ?useUnicode=yes&characterEncoding=utf8
• Convert the String object itself: new String(aString.getBytes("utf8"),"utf8");
• I even tried to translate the whole query to UTF-8
• statement.executeUpdate("set names utf8");
• statement.executeUpdate("set character_set_results=utf8");

What did I miss???

I'm using:
OS: windows XP
Java: Sun 1.6.0_15
driver: mysql-connector-java-5.0.4.jar
Mysql server: 5.1.37


Here's the source code:


Any help will be appreciated,
Eran

Ulf Dittmer
Marshal

Joined: Mar 22, 2005
Posts: 41052
    
  43

String aStr = "aaaéaaa" + System.currentTimeMillis();
byte[] strBytes = aStr.getBytes("utf8");
String aStrUtf8 = new String(strBytes,"utf8");

This part is odd. For starters, it's better to use the official encoding names: "UTF-8" instead of "utf8".

But Java uses UTF-16 for String objects, so aStrUtf8 is not actually in UTF-8, but UTF-16. The second and third line perform the exact opposites of one another - aStr should be identical to aStrUtf8.


Ping & DNS - my free Android networking tools app
Sean Clark
Rancher

Joined: Jul 15, 2009
Posts: 377

Hey,

I had the exact same problem and it was down to the default character encoding on the JVM (it was set to American ASCII so all unknown characters got a ?).

Anyway you can check the encoding with a simple bit of code, this link shows how to do it:
http://www.rgagnon.com/javadetails/java-0505.html

Good luck!

Sean


I love this place!
Eran Kaplan
Greenhorn

Joined: Aug 27, 2009
Posts: 8
Thanks for the answers.

Eventually, I changed my MySql server from the .zip without installer version to the .msi Windows Essentials version and it worked.

Ulf Dittmer, you are right. I got confused by some code sample in the web.

Thanks again.


 
wood burning stoves
 
subject: Can't write UTF8 chars
 
Similar Threads
MySQL and foreign languages
MySQL and reading non-English characters in UTF-8
UTF-decoding issue with java
Problem with DB2 & Unicode !!!
UTF-8 issue