MySQL没有正确存储一些UTF8字符

时间:2013-02-06 21:02:48

标签: java mysql jdbc utf-8 character-encoding

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

[mysqld]
character_set_server = utf8

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

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

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

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

例如,它将á替换为a

更新

我运行了show variables like '%char%'命令,确保character_set_clientcharacter_set_set都是utf8

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

1 个答案:

答案 0 :(得分:2)

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

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()。

     

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

几个月前我遇到过类似的问题。我在MySQL上检查了character_set_server的默认值(使用“mysqld --verbose -help”命令)。 这是latin1。