java - java中utf8的问题

标签 java mysql jdbc utf-8 character-encoding

我有下表:

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

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

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

最佳答案

根据 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 查询。

关于java - java中utf8的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5689381/

相关文章:

mysql - 在 MySQL 中声明表时添加数据类型大小的真正意义是什么?

sql - 如何使用 Clojure JDBC 插入 Postgres 枚举值?

java - 初学者问题: Looking for a site that has problems a beginning Java programmer can work on

java - ExpressionLanguage (EL) 未按预期工作

java - 如何在java中在特定时间+延迟检查文件?

java - 访问对象(动态选择的)子类的函数

mysql - 数据抓取/仓库应用程序的数据库设计建议?

javascript - 什么是更新表的修改内容字段并将其显示给用户的理想时间?

java - 如何检查特定驱动程序实现的 JDBC API 版本

database - Netbeans-Apache Derby : How to export to XML?