Я передаю JsonObject, состоящий из объектов типа String, из android-приложения на сервер через POST-запрос и сохраняю переменные в MySQL c помощью JDBC. Если в переменных String содержатся только английские буквы, всё работает правильно. Но при попытке сохранить кириллицу или символы "Ç", "ẞ" и т.д. сервер выдаёт ошибку:
Incorrect string value: '\xC2\x92 \xC3\x91\xC2...' for column 'contacts' at row 1
Что я уже сделал:
"jdbc:mysql://localhost/YOURWAY?useUnicode=yes&characterEncoding=UTF-8"
До этого действия, MySQL сохранял кириллицу, но частично, в виде: "Доб??о??е ут??о"UPDATE:
ALTER DATABASE название_базы CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
и ALTER TABLE название_таблицы CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ошибка больше не вылетает, но теперь при вызове SELECT * FROM название_базы
MySQL выдаёт что-то вроде "ÃÂðòðù ôÃÂÃÂöøÃÂÃÂ!". При этом, если получить эти данные на Android чере GET-запрос, на Android снова отображается "Доб??о??е ут??о".
Что я упускаю из виду?
Итак, я нашёл проблему. Это касалось вовсе не MySQL.
Проблема была в библиотеке okhttp в составе retrofit2, которые я использую для общения с сервером. Okhttp не позволяет напрямую передавать кириллицу в GET и POST запросах. Чтобы обойти это ограничение, я добавил кодирование перед передачей данных на сервер с помощью URLEncoder.encode(строка, "UTF-8");
и декодирование после приема данных с сервера с помощью URLDecoder.decode(строка, "UTF-8");
. Кроме того, понадобилось увеличить длину всех столбцов VARCHAR в MySQL в три раза (т.к. один символ кириллицы в String соответствует трём символам в UTF-8). Надеюсь, мой опыт поможет кому-то ещё.
Добрый деньНеобходимо удалить поля (заменить их значения на NULL), размер которых меньше 10 символов)
Добрый день! Возник вопрос, как удалить последний символ (при условии, что этот символ - пробел) в строке (база MySQL)?
Как angular 2+ взаимодействовать(запись, чтение, обнова) с базой данных (например MySQL)? Как развернуть базу на внутреннем сервере приложения? (тот...
Помогите разрулить потокиЯ не буду предоставлять код, мне нужна просто идея