我有下表:
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();
但是当我检索数据时,它们类似于?????
。
什么是问题,我该如何解决?
答案 0 :(得分:18)
根据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
查询。