scala slick mysql utf8mb4 支持
Posted 吾生也有涯,而知也无涯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala slick mysql utf8mb4 支持相关的知识,希望对你有一定的参考价值。
语言 scala
sql包 slick 3.2.0
数据库 mysql
数据库同步程序报错
java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x87\xB5\xF0\x9F...‘ for column ‘content‘ at row 1
这个错误见的太多,emoji字符和utf-8不兼容所致,utf8mp4字符集支持emoji
源库(另外一家公司提供)改了表的字符集,未通知我方,从库和源库字符集不同,同步时部分字符报错
改mysql,改同步程序字符集即可
改mysql简单
ALTER TABLE table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
同步服务用scala实现,引用的slick
slick比较小众 改utf8mb4全网都没什么资料,不过思路和传统java项目一致
官方配置若无相关参数,也有ini办法解决,因此有两种方式
原连接方式为
val DEST_DB = Database.forURL("jdbc:mysql://127.0.0.1:3306/table?characterEncoding=UTF-8&charset=utf8mb4", user = "root", password = "123456", driver = "com.mysql.jdbc.Driver")
解决方式两种
1 手动run 执行ini语句
val DEST_DB = Database.forURL("jdbc:mysql://127.0.0.1:3306/table?characterEncoding=UTF-8&charset=utf8mb4", user = "root", password = "123456", driver = "com.mysql.jdbc.Driver") ORIGIN_DB.run(sql"""SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci""".as[Int])
2 通过jdbc ini 实始化
val ORIGIN_DB = Database.forURL("jdbc:mysql://127.0.0.1:3306/table?charset=utf8mb4;INIT=\"SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci\"", user = "root", password = "123456", driver = "com.mysql.jdbc.Driver",executor = AsyncExecutor("orgindb", minThreads=1, queueSize=10,maxThreads=10,maxConnections=10),keepAliveConnection=true)
以上是关于scala slick mysql utf8mb4 支持的主要内容,如果未能解决你的问题,请参考以下文章
为不存在的表 slick scala (Slick 3.0.0, scala) 创建一个类 Table