我正试图将Oracle数据库中的数据检索到Windows 7 PC上的MS Access或Excel中。数据包括度数和直径符号等字符。这些没有在电脑上正确显示。我可以看到,在我的查询中使用转储功能正确存储了数据,并且是对客户端字符集的翻译没有将它们引入。
通过查看这个查询,以及使用SELECT * FROM NLS_database_PARAMETERS
查询数据库参数,我可以看到NLS_CHARACTERSET = US7ASCII
。我认为这是问题的原因,因为直径符号等不包括在这个字符集中。
但是,我已经检查了注册表,看看NLS_LANG设置为什么,它是ENGLISH_UNITED KINGDOM.WE8MSWIN1252
。我知道我正在查找正确的注册表项,因为当我更改语言/区域(例如GERMAN_GERMANY
)时,它确实会更改我的查询。
我还检查了一个覆盖此设置的环境变量,但找不到。我尝试创建一个NLS_LANG环境变量,使用与上面相同的设置,但没有任何区别。
我的Windows代码页设置为1252。数据库NLS_NCHAR_CHARACTERSET
设置为AL16UTF16
。
下一步该怎么办?
如果NLS_CHARACTERSET
设置为US7ASCII
,则永远不会从中获得任何特殊字符。使用NLS_NCHAR_CHARACTERSET=AL16UTF16
,您应该获得任何字符,前提是列的数据类型是NVARCHAR2
或NCHAR
(而不是VARCHAR2
)
将您的本地NLS_LANG
设置为ENGLISH_UNITED KINGDOM.AL32UTF8
,然后它应该可以工作。