小编典典

MySQL无法正确存储一些UTF8字符

java

我正在使用 mysql dbms存储来自Wikipedia的页面。我已utf-8使用指令在my.cnf文件中将字符集编码设置为(维基百科编码):

[mysqld]
character_set_server = utf8

并使用'chararacter set utf8'属性定义创建了我的数据库。

我还通过以下方式更改了mysqld客户端的字符集编码:

  • 'charSet=utf8'在初始化我的jdbc驱动程序时插入属性。
  • 进行查询 'set names utf8'

但是我注意到mysql服务器用其他字符替换了一些字符。

例如,它替换áa

更新

我已经运行的命令show variables like '%char%'确保这两个character_set_clientcharacter_set_setutf8

如何在数据库中存储正确的字符?谢谢!


阅读 206

收藏
2020-11-30

共1个答案

小编典典

尝试在数据库URL中指定编码:

url="jdbc:mysql://localhost:port/DBNAME?characterEncoding=UTF-8"

以下是有关我的答案的更多信息:

以下内容摘自MySQL文档(http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-
charsets.html):

从JDBC驱动程序发送到服务器的所有字符串都将从本机Java
Unicode形式自动转换为客户端字符编码,包括使用Statement.execute(),Statement.executeUpdate(),Statement.executeQuery()发送的所有查询以及所有PreparedStatement和CallableStatement参数,但不包括使用setBytes(),setBinaryStream(),setAsciiStream(),setUnicodeStream()和setBlob()设置的参数。

设置字符编码

连接后会自动检测客户端和服务器之间的字符编码。对于服务器版本4.1.0和更高版本,可以使用character_set_server在服务器上指定编码。驱动程序自动使用服务器指定的编码。要覆盖客户端自动检测到的编码,请使用用于连接到服务器的URL中的characterEncoding属性。要允许从客户端发送多个字符集,请使用UTF-8编码,方法是将utf8配置为默认服务器字符集,或者配置JDBC驱动程序以通过characterEncoding属性使用UTF-8。

几个月前,我遇到了类似的问题。我在MySQL上检查了character_set_server的默认值(使用“ mysqld –verbose
–help”命令)。是拉丁语1。

2020-11-30