【问题标题】:Unable to insert utf-8 chars with prepared statement to mysql无法将带有准备好的语句的 utf-8 字符插入 mysql
【发布时间】:2014-04-03 05:57:37
【问题描述】:

我在插入带有这样准备好的语句的 utf-8 字符时遇到问题:

    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/tournament_system?"
            + "user=root&password=root");

    java.sql.PreparedStatement ps = conn
            .prepareStatement("  insert into PLAYER (ID, NAME, SURNAME, CLUB,  WORLD_RANKING, USER_ID)  VALUES(?, ?, ?, ?,  ?, ?)");
    ps.setInt(1, 100001);
    ps.setString(2, "ěščřž");
    ps.setString(3, "xxx");
    ps.setString(4, null);
    ps.setInt(5, 5);
    ps.setInt(6, 1);
    ps.executeUpdate();

它在列名中插入这样的内容:“?š??ž”

但是当我像这样在 phpMyAdmin 中执行 sql 时:

INSERT INTO `tournament_system`.`PLAYER` (`ID`, `NAME`, `SURNAME`, `CLUB`, `PLAYER_DISCRIMINATOR`, `WORLD_RANKING`, `USER_ID`) VALUES ('10002', 'ěščřž', 'qqq', NULL, 'qqq', NULL, '1');

效果不错

那么问题出在哪里?如果第二个选项有效,我想我已经正确配置了我的数据库

MYSQL 版本:

Server: Localhost via UNIX socket
Server version: 5.5.34-0ubuntu0.12.10.1
Protocol version: 10
User: root@localhost
MySQL charset: UTF-8 Unicode (utf8)

更新:

当我尝试这个时:ps.setBytes(2, "ččřž".getBytes("UTF-8")); 然后它可以工作,但我真的不能把我所有的 ps 都改成这个。不然怎么解决?

【问题讨论】:

  • 您的字符串文字是否与您的 Java 源代码中的字符串文字一样?实际上问题是否可能出在您用于编译代码的设置中?我建议您记录字符串的 Unicode 值 - 它可能与数据库无关。
  • 试试这个,希望对你有帮助。 link
  • 是不是你java源文件编码的问题?您在编辑器设置中使用 UTF-8 吗?
  • 是的,我想我正在使用 utf-8 编码。 Raj:我尝试使用您的链接设置系统编码,但也没有成功。乔恩:我如何记录 Unicode 值?
  • 在连接字符串中设置编码,还要确保该列是utf8类型。

标签: java mysql


【解决方案1】:

您可以使用characterEncoding=UTF-8将编码添加到您的jdbc连接字符串中,这将在PreparedStatement上生效:

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/tournament_system?"
        + "user=root&password=root&characterEncoding=UTF-8");

【讨论】:

    猜你喜欢
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2013-08-10
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多