Кодировка таблицы utf8mb4 не работает mysql-коннектор-java 5.1.44 (и более поздние версии)

#java #mysql #connector-j

Вопрос:

У меня есть сервер mysql 8.0.21 с конфигурацией

 character_set_client    utf8
character_set_connection    utf8
character_set_database  utf8
character_set_filesystem    binary
character_set_results   utf8
character_set_server    utf8
character_set_system    utf8
 

И таблица с кодировкой utf8mb4

 CREATE TABLE `test` (`c0` TEXT) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
 

Этот код работает с mysql-коннектором-java 5.1.18

 Connection conn = DriverManager.getConnection("jdbc:mysql://hostxxxx/test?"  
        "user=userxxxamp;password=passxxx");
String sql = "INSERT INTO test(c0) value ('🚘💕🚘💕🚘')"; 
conn.createStatement().execute(sql)
 

Но когда я использую mysql-connector-java-5.1.44 (или выше) -> получаю ошибку java.io.IOException: Incorrect string value: 'xF0x9Fx9Ax98xF0x9F...'

Я могу заставить этот код работать с версией 5.1.44 , изменив конфигурацию сервера character_set_server на utf8mb4 , но из-за обратной совместимости я не смог его изменить

Кто-нибудь знает, как этот код работает со старой версией (mysql-connector-java-5.1.18), но не работает с версией (5.1.44 и более поздними версиями) Я нашел некоторые темы, связанные с этой ошибкой, но не смог решить свою проблему

Комментарии:

1. Попробуйте принудительно использовать кодировку UTF-8 в соединении JDBC: amp;useUnicode=trueamp;characterEncoding=UTF-8

2. По какой причине вы используете драйвер JDBC версии 5.1 с базой данных версии 8.0? Попробуйте обновить драйвер JDBC до версии 8.0.

3. @Andreas это устаревшая система, поддерживающая многопользовательскую версию mysql (5.x, 8.x…), с которой я пробовал amp;useUnicode=trueamp;characterEncoding=UTF-8 , но она не работает