File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes JDBC and Relational Databases 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
JavaRanch » Java Forums » Databases » JDBC and Relational Databases
Bookmark "Can Watch "Can New topic

Can't write UTF8 chars

Eran Kaplan

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,

Ulf Dittmer

Joined: Mar 22, 2005
Posts: 42959

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.
Sean Clark

Joined: Jul 15, 2009
Posts: 377


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:

Good luck!


I love this place!
Eran Kaplan

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.

I agree. Here's the link:
subject: Can't write UTF8 chars
It's not a secret anymore!