java中的utf8问题

我有下表:

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驱动程序文档,您还需要在JDBC连接URL中设置字符编码。 这是一个例子:

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

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

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

也可以看看:

  • Unicode – 如何使角色正确?

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