Search code examples
javamysqllinuxjdbcutf8mb4

Changing MySQL charset to UTF8 on linux so it will work with JDBC


My application can be deployed on Win\Linux, and uses MySQL 5.5, and it may store data in different languages.

I changed my MySQL server to have the following charset variables set to UTF8:

  • character_set_client
  • character_set_connection
  • character_set_connection
  • character_set_database
  • character_set_results
  • character_set_server
  • character_set_system

To do so, I added the following to my.ini:

[mysql] 
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'  
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

It worked well on Windows (MySQL 5.5.21 64 bit), but when my application run on Linux (MySQL 5.5.2 64 bit) I'm getting the following error:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown character set: 'utf8mb4'

Anyone knows where does 'utf8mb4' came from and how can I overcome this?

JDBC driver: 'mysql-connector-java-5.1.18-bin'


Solution

  • You can just to add to your connection-url params like:

    jdbc:mysql://hostname:3306/dbname?useUnicode=true&characterEncoding=utf8&characterResultSets=utf8

    hostname -> may be localhost or any other host(you can specify with ip address 000.000.0.0)