【问题标题】:MySQL does not store properly some UTF8 charsMySQL 无法正确存储一些 UTF8 字符
【发布时间】:2013-01-22 05:19:01
【问题描述】:

我正在使用 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]您使用的是哪个驱动程序? [2]在设置参数存入数据库之前你是用new String([String Object].getBytes(), "UTF-8")吗?
  • [1]我正在使用 MySQL 连接器/J。 [2] 我试过new String([String Object].getBytes(), Charset.forName("UTF-8")),但还是不行。
  • 能否从 MySQL Workbench 或类似工具中插入 UTF-8 文本?如果是这样,那么正如 Eran 指出的那样,它可能与您的连接 URL 设置有关。
  • 是的,我可以使用 MySQL Workbench 存储 utf8 字符串。
  • 当您运行show variables 命令时,character_set_server 的值是多少?您尝试了我下面的建议吗?

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


【解决方案1】:

尝试在 DB 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()。

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

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

【讨论】:

    猜你喜欢
    • 2011-11-18
    • 2012-07-13
    • 1970-01-01
    • 2014-06-02
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2013-06-01
    相关资源
    最近更新 更多