If you wonder how to configure your Hibernate to cooperate with MySQL using UTF-8 character encoding – you are in the right place. The problem you may suffer from: you are using other languages than English in your web application and special characters from these languages are not saving properly. For example, instead of Polish characters like “ęóąśłżźć” you get “????????”.
What you need:
- Hibernate 3
- MySQL 5
- Already configured Hibernate + MySQL
Lets begin with creating new class that has to extend org.hibernate.dialect.MySQLDialect :
import org.hibernate.dialect.MySQLDialect; public class CustomMySQLDialect extends MySQLDialect { @Override public String getTableTypeString() { return " DEFAULT CHARSET=utf8"; } }
It is done to create your tables automatically using correct character encoding – UTF-8.
The second part of solution:
1. Add hibernate.connection.characterEncoding property to hibernate.cfg.xml file with value UTF-8 .
2. Set dialect property to newly created com.codesmuggler.CustomMySQLDialect .
com.mysql.jdbc.Driver jdbc:mysql://localhost/DB_NAME_HERE DB_USERNAME_HERE DB_PASSWORD_HERE 10 true com.codesmuggler.CustomMySQLDialect create-drop UTF-8
Another solution:
instead of adding hibernate.connection.characterEncoding in hibernate.cfg.xml configuration file add to value of the property hibernate.connection.url string: ?characterEncoding=UTF-8:
jdbc:mysql://localhost/DB_NAME_HERE?characterEncoding=UTF-8
Now you can enjoy with properly coded UTF-8 chars.