Выставленный Котлин.Проблема с кодировкой кириллицы - PullRequest
0 голосов
/ 18 ноября 2018

Я попытался исправить проблему с кодировками. Итак, я отправил из «Почтальона» запрос веб-браузера на сервер, где я ищу данные в базе данных по ключам в запросе. Запрос может быть таким:

http://localhost:8080/books.getBooksByGenre/Документальное/0/10

(в браузере). Сервер получает строку, например

http://localhost:8080/books.getBooksByGenre/%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5/0/10

затем принимает параметры из URL: genreName: 'Документальное' начало: 0 Количество: 10. Затем эти данные отправляются на дао:

override fun findGenreByName(genreName: String): DatabaseGenre {
    return transaction(db) { getGenreByName(genreName) }
}

private fun getGenreByName(genreName: String): DatabaseGenre {
    return try {
        val foundGenre = GenreEntity.find { Genres.genre eq genreName }.single()
        DatabaseGenre(foundGenre.id.value, foundGenre.genre, foundGenre.link)
    } catch (e: Exception) {
        throw NothingFoundInDatabaseException("no one genre found by '$genreName'")
    } catch (e: NoSuchElementException) {
        val m = "Duplicates of genre with name '$genreName'"
        throw DuplicatedDataInDatabaseException(m)
    }
}

В журнале я вижу, что sql-запрос для поиска жанров правильный, но я получаю исключение:

java.util.NoSuchElementException: Collection is empty.

sql-запрос, как я уже сказал, правильный:

SELECT genres.id, genres.genre, genres.link FROM genres WHERE genres.genre = 'Документальное'

Структура таблицы жанров:

genres id: int(10) genre: varchar(100) link: varchar(100

Я пытался выбрать все жанры, и этот запрос выполнялся почти правильно. Итак, я решил проверить этот запрос английским словом и правильно выполнить этот запрос:

SELECT genres.id, genres.genre, genres.link FROM genres WHERE genres.genre = 'simpleGenre'

У меня нет исключений по этому запросу.

Итак, что я сделал не так и как исправить проблему с сопоставлениями?

UPD: Как я сказал в github ( issue ), я попробовал этот запрос на mysql cli и получил правильный ответ.

Кроме того, я попытался декодировать параметры URL (с помощью класса Java URLDecoder). Это тоже не помогает.

1 Ответ

0 голосов
/ 23 ноября 2018

Спасибо, @madhead. Я попробовал продвижение @madhead, и это работает. Итак, с этого времени URL моего соединения с БД выглядит так:

val connect = Database.connect(
        url = "jdbc:mysql://localhost:3306/my_database_name?characterEncoding=utf8&useUnicode=true",
        driver = "com.mysql.jdbc.Driver",
        user = user_name,
        password = password
)
...