Scala/Slick JDBC 使用类型安全配置的编码配置
Scala/Slick JDBC encoding configuration with typesafe config
我正在使用 Slick 构建 Scala 应用程序,其中我用 val db = Database.forConfig("mysql.dev")
加载 MySQLDriverbackend
并且我的 "application.conf" 文件看起来像
mysql = {
dev = {
dataSourceClass = "com.mysql.jdbc.jdbc2.optional.MysqlDataSource"
properties = {
databaseName = "test"
user = "user"
password = "password"
serverName = "localhost"
portNumber="3306"
}
}
}
我已成功将数据保存到使用默认 utf-8 编码的数据库中。但是,当我试图保存字符 P 时,我在数据库中以可怕的 ?
而不是输入字符结尾。
我想我没有声明我的连接需要使用 UTF-8,但是我在 forConfig
的文档中找不到该选项。
你知道我该如何解决这个问题吗?
谢谢。
对于 MySQL,在您的连接 URL 中添加参数 useUnicode=true&characterEncoding=UTF-8
应该可以解决问题,即
jdbc:mysql://<host>:<port>/<database>?useUnicode=true&characterEncoding=UTF-8
您可以使用此 link 来配置 url。
保持相同文件结构的 Sudhir 答案的替代方法是将properties
设置为:
properties = {
databaseName = "test"
user = "user"
password = "password"
serverName = "localhost"
portNumber="3306"
characterEncoding="utf8"
useUnicode=true
}
utf8mp4 表情符号问题
for spring-boot
spring.datasource.hikari.connection-init-sql=SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
http://slick.lightbend.com/doc/3.2.0/config.html
因为 slick 提供了 HikariCP 池,我认为 hikari 池可以解决这个问题然后尝试
mysql_orginal = {
connectionPool = "HikariCP"
driver = "com.mysql.jdbc.Driver"
connectionInitSql ="SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
url = "jdbc:mysql://127.0.0.1/table?useUnicode=true&characterEncoding=UTF-8"
keepAliveConnection = true
user = "root"
password = "123456"
numThreads = 4
poolName="mysql_orginal_pool"
}
val ORIGIN_DB = Database.forConfig("mysql_orginal")
libraryDependencies += "com.typesafe.slick" %% "slick-hikaricp" % "3.2.0"
有效
演示:https://github.com/cclient/ScalaMysqlSync
参考:
http://slick.lightbend.com/doc/3.2.0/database.html#databaseconfig
我正在使用 Slick 构建 Scala 应用程序,其中我用 val db = Database.forConfig("mysql.dev")
加载 MySQLDriverbackend
并且我的 "application.conf" 文件看起来像
mysql = {
dev = {
dataSourceClass = "com.mysql.jdbc.jdbc2.optional.MysqlDataSource"
properties = {
databaseName = "test"
user = "user"
password = "password"
serverName = "localhost"
portNumber="3306"
}
}
}
我已成功将数据保存到使用默认 utf-8 编码的数据库中。但是,当我试图保存字符 P 时,我在数据库中以可怕的 ?
而不是输入字符结尾。
我想我没有声明我的连接需要使用 UTF-8,但是我在 forConfig
的文档中找不到该选项。
你知道我该如何解决这个问题吗? 谢谢。
对于 MySQL,在您的连接 URL 中添加参数 useUnicode=true&characterEncoding=UTF-8
应该可以解决问题,即
jdbc:mysql://<host>:<port>/<database>?useUnicode=true&characterEncoding=UTF-8
您可以使用此 link 来配置 url。
保持相同文件结构的 Sudhir 答案的替代方法是将properties
设置为:
properties = {
databaseName = "test"
user = "user"
password = "password"
serverName = "localhost"
portNumber="3306"
characterEncoding="utf8"
useUnicode=true
}
utf8mp4 表情符号问题
for spring-boot
spring.datasource.hikari.connection-init-sql=SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
http://slick.lightbend.com/doc/3.2.0/config.html
因为 slick 提供了 HikariCP 池,我认为 hikari 池可以解决这个问题然后尝试
mysql_orginal = {
connectionPool = "HikariCP"
driver = "com.mysql.jdbc.Driver"
connectionInitSql ="SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
url = "jdbc:mysql://127.0.0.1/table?useUnicode=true&characterEncoding=UTF-8"
keepAliveConnection = true
user = "root"
password = "123456"
numThreads = 4
poolName="mysql_orginal_pool"
}
val ORIGIN_DB = Database.forConfig("mysql_orginal")
libraryDependencies += "com.typesafe.slick" %% "slick-hikaricp" % "3.2.0"
有效
演示:https://github.com/cclient/ScalaMysqlSync
参考:
http://slick.lightbend.com/doc/3.2.0/database.html#databaseconfig