Kotlin 暴露的科特林。西里尔字母编码的问题
我试图解决编码问题。所以,我从“邮递员”发送,从web浏览器请求发送到服务器,在服务器上,我通过请求中的键搜索数据库中的数据。请求可以如下所示: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
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,它真的很有效。非常感谢。花了一个星期的时间。不知道如何将其标记为正确答案