Kotlin 暴露的科特林。西里尔字母编码的问题

Kotlin 暴露的科特林。西里尔字母编码的问题,kotlin,orm,collate,kotlin-exposed,Kotlin,Orm,Collate,Kotlin Exposed,我试图解决编码问题。所以,我从“邮递员”发送,从web浏览器请求发送到服务器,在服务器上,我通过请求中的键搜索数据库中的数据。请求可以如下所示: http://localhost:8080/books.getBooksByGenre/Документальное/0/10 val connect = Database.connect( url = "jdbc:mysql://localhost:3306/my_database_name?characterEncoding=ut

我试图解决编码问题。所以,我从“邮递员”发送,从web浏览器请求发送到服务器,在服务器上,我通过请求中的键搜索数据库中的数据。请求可以如下所示:

http://localhost:8080/books.getBooksByGenre/Документальное/0/10
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
)
(在浏览器中)。 服务器接收字符串,如

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。 然后,该数据发送到dao:

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 = 'Документальное'
类型表的结构:

类型
id:int(10)
类型:瓦查尔(100)
链接:varchar(100)

我尝试了,选择所有类型,这个查询执行得几乎正确。因此,我决定,用英语单词检查这个查询,这个查询执行得正确:

SELECT genres.id, genres.genre, genres.link FROM genres WHERE genres.genre = 'simpleGenre'
我对这个问题没有例外

那么,我做错了什么,以及如何解决排序规则的问题呢

UPD: 正如我在github()上所说的,我尝试了这个查询,结果得到了正确的答案

此外,我还尝试了解码url参数(使用java URLDecoder类)。这也没有帮助。

谢谢,@madhead。 我尝试了@madhead的一个改进,它成功了。因此,从现在起,我的DB连接URL如下所示:

http://localhost:8080/books.getBooksByGenre/Документальное/0/10
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
)

嗯,是的。这叫做URL编码。如果它不能自动解码,你就需要手动解码。@Zoe,谢谢你的回答。但是,为什么我在日志中看到用西里尔字母(以“正常”形式)的sql查询它没有编码符号,只是普通的西里尔字母。另外,我会试试你的建议,写在这里results@Zoe,我已经尝试了你的建议。它不起作用。我更新了我的问题描述,尝试修复这个问题,并链接到github问题,我在mysql cli中写道,所有工作都很好你有
characterEncoding=utf8吗MySQL连接URL中的参数?如
jdbc:mysql://localhost:3306/db?characterEncoding=utf8
。另一个有用的参数是
useUnicode=true
@madhead,fuu**ghm,它真的很有效。非常感谢。花了一个星期的时间。不知道如何将其标记为正确答案