MySQL не может обновить запись со строкой utf8mb4 на Jetty

Я запускаю java поверх причала на экземпляре Linux EC2, используя базу данных MySQL. Столбец представляет собой VARCHAR, настроенный на прием кодировки utf8mb4.

Поиграв с вещами, я обнаружил, что это работает, когда я запускаю этот код через gradle jettyRunWar или даже при запуске того же кода на сервере tomcat.

Это не работает, когда я помещаю ту же самую войну, которая работала раньше, в $JETTY_HOME/webapps/root.war, а затем запускаю причал с sudo service jetty start.

Показанная ошибка -

java.sql.BatchUpdateException: Incorrect string value: '\xF0\x9F\x99\x89' for column 'name' at row 1

Текущее определение столбца -

`name` varchar(50) CHARACTER SET utf8mb4 DEFAULT NULL

Значение устанавливается в SQL с помощью подготовленногоStatement.setString(...), и я убедился, что JAR коннектора mysql такой же.

Любые идеи?


person Kof    schedule 13.11.2013    source источник


Ответы (1)


Проблема решена после того, как я установил для всех character_set_... переменных БД MySQL значение utf8mb4.

Это, вероятно, означает, что более новая версия причала (8+) обрабатывает подключение JDBC иначе, чем Tomcat или более старая версия, потому что во всех случаях использовалась точная строка подключения, определение bean-компонентов и БД.

До сих пор параметры character_set_... были установлены на utf8 с определенными столбцами, определенными как utf8mb4, которых было достаточно.

Надеюсь, это спасет кого-нибудь еще в тот день, когда я застрял на нем.

person Kof    schedule 14.11.2013
comment
Можно поконкретнее, как вы ее решили? Я использую следующие настройки для mysql, но все равно получаю ту же ошибку, о которой вы упомянули: [client] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci Кроме того, я могу подтвердить, что можно использовать Java-приложение JDBC для вставки символов UTF8, но только не из Jetty. Спасибо. - person Yuchen Wang; 05.12.2013