kotlin - 暴露了 Kotlin。西里尔文编码问题

标签 kotlin orm collate kotlin-exposed

我试图解决编码问题。所以,我从“ postman ”发送,从网络浏览器请求到服务器,在那里我通过请求中的键搜索数据库中的数据。请求可以是这样的:

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 获取参数:
流派名称:'Документальное'
开始: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-query 是正确的,但我收到一个异常:
java.util.NoSuchElementException: Collection is empty.

正如我所说,sql-query 是正确的:
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'

我对这个查询没有异常(exception)。

那么,我做错了什么以及如何解决排序问题?

更新:
正如我在 github ( issue ) 上所说,我已经在 mysql cli 中尝试了这个查询,我收到了正确的答案。

另外,我尝试解码 url 参数(使用 java URLDecoder 类)。它也没有帮助。

最佳答案

谢谢,@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
)

关于kotlin - 暴露了 Kotlin。西里尔文编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53360110/

相关文章:

kotlin - 如何在 kotlin 中强制执行空安全注释检查?

java - 如何在 Kotlin 中填充 String[] 数组

android - 如何将 JWT token 从一个 Activity 传递到另一个 Activity ?

android - 在构造函数中使用 Android 上下文作为参数创建单例类

python - 为什么 "browse"方法使用不存在的 ID 返回错误的记录集?

android - 不区分大小写字母顺序的 SQLite 查询

java - JPA直接返回query.getSingleResult()时返回null

java - 该查询的 Hibernate 等效项是什么?(添加两列)

sql - 规范化 MySQL 查询中的重音字符

mysql - 1366, django 或 collat​​e 或 mysql 中的表的字符串值不正确。