#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
, но она не работает