Ошибка символа \ x92 в MySQL из webhook - PullRequest
0 голосов
/ 25 октября 2018

В приложении Spring Boot появляется исключение SQL со словами Caused by: java.sql.SQLException: Incorrect string value: '\x92s.","...' for column 'json' at row 1.Скорее всего, это означает, что я получаю данные из webhook как латиница-1 или Windows 1252. Я вижу два типа апострофов, ' и .Моя база данных настроена как utf8mb4.

. Я нахожу это немного странным, потому что раньше я получал сообщение об ошибке.Как я могу проверить, в какой кодировке отправляются данные?/ Как я могу решить эту проблему?

Webhook от Typeform.Когда я отправляю тестовый запрос через «test webhook», я вижу все виды \u2019 и подобные коды, когда смотрю на вкладку заголовка ответа в Chrome Dev Tools.Так что это должен быть Unicode.Я немного сбит с толку, почему MySQL интерпретирует это как latin-1.

Когда я распечатываю строку на бэкэнде перед сохранением, я вижу, что она в Unicode.Зачем?Из-за следующего: слово collega's записывается как \x63\x6f\x6c\x6c\x65\x67\x65\x61\x27\x73 в юникоде (см. Конвертер здесь) , что составляет 99 111 108 108 101 103 97 39 115 в десятичном виде.Это то, что я вернусь. - это \xe2\x80\x99 или в десятичном виде 226 128 153.

Когда я отлаживаю Mysql.IO.class, я вижу, что кодировка символов WINDOWS-1252.Это виновник, но где этот набор?Хм ... каким-то образом драйвер JDBC делает это по следующему коду в Connectionimpl.class.

String encoding = null;
if (this.getUseUnicode()) {
  encoding = this.getEncoding();
}

1 Ответ

0 голосов
/ 25 октября 2018

Ух ... проблема заключалась в том, что в моей сборке dev я не указывал кодировку символов в URL.Тем не менее, я сделал это в моей производственной сборке.Вот почему он работал в производстве, а не в разработке.

Мне нужно было добавить параметры запроса из моей производственной среды: useUnicode=true&characterEncoding=utf8.

...