我正在使用Java和Oracle 10g数据库。
如何使用JDBC为Oracle数据库指定UTF-8等字符编码? 我怎样才能找到JDBC使用的当前编码?
答案 0 :(得分:6)
瘦Oracle JDBC驱动程序传输的数据始终以UTF-16(java的内部表示形式)发送。数据库服务器会将其转换为已配置使用的任何国家字符集(因此,如果数据库设置为UTF-8,则此转换将自动进行)。请注意,字符集在数据库级别设置,而不是在架构或连接级别设置。
要查找在DB上配置的字符集,请执行以下查询:
SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET' ;
(您用来连接数据库的帐户需要具有读取系统表的适当权限才能执行此操作)
答案 1 :(得分:4)
我不确定我理解这个问题。
Oracle数据库字符集在创建数据库时设置,并且通常非常痛苦地进行更改。您的Java应用程序无法指定数据库字符集。您可以看到数据库和国家字符集是什么
SELECT *
FROM v$nls_parameters
WHERE parameter LIKE '%CHARACTERSET'
由于您当前的数据库字符集是ISO 8859-1,因此无法存储亚洲语言的字符。您可以按照10g全球化支持指南中的character set migration上的说明更改现有数据库的数据库字符集。您需要与DBA合作才能执行此操作,因为它会影响整个数据库。
在内部,Java字符串始终是Unicode(特别是UTF-16),因此您无法对其进行配置。 Java应用程序的输出可能不是Unicode - 例如,如果您的Java应用程序是生成网站,则生成的网页很可能使用某些非Unicode字符集。但我不认为这是你所问的问题。