Java JDBC中的字符集

Java JDBC中的字符集,java,jdbc,oracle11g,Java,Jdbc,Oracle11g,我正在使用Oracle11g,字符集为utf8。我有一张有日文和中文的桌子 当我使用一个简单的JDBC程序查询数据库时,我只得到问号作为输出 有人能帮我吗?好的,你是这么说的 SELECT value FROM v$nls_parameters WHERE parameter = 'NLS_CHARACTERSET' 返回UTF8?这是非常不寻常的,尤其是在11g中——更常见的情况是看到AL32UTF8的值,这是Unicode标准的最新版本 当您查看实际存储在数据库中的数据时会发生什么?

我正在使用Oracle11g,字符集为utf8。我有一张有日文和中文的桌子

当我使用一个简单的JDBC程序查询数据库时,我只得到问号作为输出


有人能帮我吗?

好的,你是这么说的

SELECT value
  FROM v$nls_parameters
 WHERE parameter = 'NLS_CHARACTERSET'
返回
UTF8
?这是非常不寻常的,尤其是在11g中——更常见的情况是看到
AL32UTF8
的值,这是Unicode标准的最新版本

当您查看实际存储在数据库中的数据时会发生什么?如果直接对数据库运行与通过JDBC运行的查询相同的查询,但调用
DUMP
函数,而不只是选择列,那么输出是什么

SELECT DUMP( column_name, 1016 ) 
  FROM table_name
 WHERE some_key = some_value
您正在使用精简Oracle JDBC驱动程序吗?或者您正在使用OCI JDBC驱动程序?或者您正在使用Oracle ODBC驱动程序和JDBC-ODBC桥,正如您的标记所暗示的那样?后者在当今时代将是非常不寻常的——如果数据库平台提供本机JDBC驱动程序,就没有理由使用JDBC-ODBC桥驱动程序

客户机上是否设置了NLS_LANG?

问题已解决 Eclipse>首选项>常规>工作区>文本文件编码为UTF-8
谢谢大家。

您如何查看输出?如果有疑问,将输出中的每个字符记录为一个整数,然后与Unicode代码图进行比较。我获取从DB检索的字符串并将其转换为字符数组,然后使用下面的函数character.getNumericValue(char)获取每个字符的数值;所有字符的数值都是-1。所有的字符都是问号,这不是你应该得到它们的方式,而是把它们当作数字。使用
charAt
并将其转换为int。Justin cave,仅限UTF8。不一定是32UTF8。对于第二个查询,它返回Typ=1 Len=26 CharacterSet=UTF8:6d,43,49,43,4f,e6,97,a5,e6,9c,ac,e3,81,b8,e3,82,88,e3,81,86,e3,81,93,e3,81,9d。我正在使用瘦oracledriver@user1029292-好的。这应该表示字符串“mCICO”,后跟7个3字节字符,对吗?这意味着数据存储正确。您使用的是什么Oracle驱动程序?瘦JDBC驱动程序?OCI JDBC驱动程序?带有JDBC=ODBC桥的ODBC驱动程序?还有别的吗?它的瘦JDBC驱动程序。这就是我现在使用的。