【问题标题】:problem with utf8 in javajava中的utf8问题
【发布时间】:2011-08-07 01:24:11
【问题描述】:

我有下表:

create table test
(
  fname char(20) character set utf8 collate utf8_turkish_ci,
  id int primary key
);

我插入数据如下:

resultSet.executeQuery("set namee utf8");
preparedStatement = connection.prepareStatement("insert into test(fname) values(?)");
preparedStatement.setstring(1,"alis");
preparedStatement.executeUpdate();

但是当我检索数据时,它们类似于?????

什么是问题,我该如何解决?

【问题讨论】:

  • 在你以后的问题中,请注意代码。您发布的 Java 代码根本无法编译,只会在问题中引入大量噪音(红鲱鱼)。

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


【解决方案1】:

根据MySQL JDBC driver documentation,您还需要在 JDBC 连接 URL 中设置字符编码。这是一个例子:

jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8

否则 MySQL JDBC 驱动程序将在通过网络发送之前使用平台默认编码将字符转换为字节,在您的情况下显然不是 UTF-8。然后,所有未覆盖的字符都将替换为问号。

此外,在检索数据时,您需要确保显示/写入字符的控制台/文件也支持/使用 UTF-8。否则它们也会变成问号。如何解决这个问题取决于您显示/写入这些字符的方式/位置。

另见:


顺便说一下,这里不需要SET NAMES 查询。

【讨论】:

  • 到目前为止,我只使用了 characterEncoding=UTF-8 属性。 useUnicode=yes 有什么作用?
  • @richards:只是为了确定。它确实默认为yes/true。但是,如果这在某处/以某种方式改变,那么单独 characterEncoding=UTF-8 仍然会失败。
  • 一天内连续两次,您的旧答案为我节省了很多时间。 +6,谢谢!
猜你喜欢
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 2010-09-25
相关资源
最近更新 更多