utf8(阿拉伯语)字符串显示为问号(?)
utf8 (arabic) string appears as question mark (?)
我使用的是 3.8.2 版本,当插入新记录时,utf8 字符串出现一些问题,在数据库中显示为问号 (?),但它正确显示旧记录(使用 phpmyadmin 插入)。
这是我如何初始化 MySQLPool
fun init(vertx: Vertx): MySQLPool {
val connectOptions = MySQLConnectOptions()
.setPort(Config.mysqlPort)
.setHost(Config.mysqlHost)
.setDatabase(Config.mysqlDatabase)
.setUser(Config.mysqlUsername)
.setPassword(Config.mysqlPassword)
.setCharset("utf8") // tried utf8mb4 also same result
.setCollation("utf8_general_ci") // also tried utf8mb4_general_ci
val poolOptions = PoolOptions().setMaxSize(Config.maxPoolSize)
return MySQLPool.pool(vertx, connectOptions, poolOptions)
}
mysql 变量
character_set_client = utf8
character_set_connection = utf8
character_set_database = utf8
character_set_filesystem = binary
character_set_results = utf8
character_set_server = utf8mb4
character_set_system = utf8
table整理
utf8_general_ci
mysql 创建 table
CREATE TABLE `news` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Title` text NOT NULL,
`Image` text NOT NULL,
`Link` mediumtext NOT NULL,
`Summery` mediumtext NOT NULL,
`Story` mediumtext NOT NULL,
`Time` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
谢谢
我想这就是你问题的答案Arabic language in php/mysql appears "????" question marks in html
您必须在第一次连接时设置字符集。
jvm 中的默认字符集似乎设置为 windows-1252 将其更改为 UTF-8 解决了
System.setProperty("file.encoding", "UTF-8")
val charset = Charset::class.java.getDeclaredField("defaultCharset")
charset.isAccessible = true
charset.set(null,null)
setCharset("utf8") 和 setCollation("utf8_general_ci") 选项在连接级别配置,但实际上对编码的字符集没有影响,这就是为什么编码值在默认的 jvm 字符集中编码的原因
我使用的是 3.8.2 版本,当插入新记录时,utf8 字符串出现一些问题,在数据库中显示为问号 (?),但它正确显示旧记录(使用 phpmyadmin 插入)。
这是我如何初始化 MySQLPool
fun init(vertx: Vertx): MySQLPool {
val connectOptions = MySQLConnectOptions()
.setPort(Config.mysqlPort)
.setHost(Config.mysqlHost)
.setDatabase(Config.mysqlDatabase)
.setUser(Config.mysqlUsername)
.setPassword(Config.mysqlPassword)
.setCharset("utf8") // tried utf8mb4 also same result
.setCollation("utf8_general_ci") // also tried utf8mb4_general_ci
val poolOptions = PoolOptions().setMaxSize(Config.maxPoolSize)
return MySQLPool.pool(vertx, connectOptions, poolOptions)
}
mysql 变量
character_set_client = utf8
character_set_connection = utf8
character_set_database = utf8
character_set_filesystem = binary
character_set_results = utf8
character_set_server = utf8mb4
character_set_system = utf8
table整理
utf8_general_ci
mysql 创建 table
CREATE TABLE `news` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Title` text NOT NULL,
`Image` text NOT NULL,
`Link` mediumtext NOT NULL,
`Summery` mediumtext NOT NULL,
`Story` mediumtext NOT NULL,
`Time` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
谢谢
我想这就是你问题的答案Arabic language in php/mysql appears "????" question marks in html
您必须在第一次连接时设置字符集。
jvm 中的默认字符集似乎设置为 windows-1252 将其更改为 UTF-8 解决了
System.setProperty("file.encoding", "UTF-8")
val charset = Charset::class.java.getDeclaredField("defaultCharset")
charset.isAccessible = true
charset.set(null,null)
setCharset("utf8") 和 setCollation("utf8_general_ci") 选项在连接级别配置,但实际上对编码的字符集没有影响,这就是为什么编码值在默认的 jvm 字符集中编码的原因