aspose file tools*
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 The Java EE 7 Tutorial Volume 1 or Volume 2 this week in the Java EE forum
or jQuery UI in Action in the JavaScript forum!
JavaRanch » Java Forums » Databases » JDBC
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: 41574

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

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.

Consider Paul's rocket mass heater.
subject: Can't write UTF8 chars