【发布时间】: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类型。