字符编码问题 - Oracle SQL



我对远程数据库进行了简单的查询。我进行查询的表具有带有varchar2的所有字段。但是,有些字段返回"?"在º,£。我检查了并获取:

NLS_CHARACTERSET: AL32UTF8
NLS_NCHAR_CHARACTERSET:AL16UTF16

检查我的/etc/default/locale文件。这些是结果:

LANG="en_US.UTF-8"
LC_NUMERIC="pt_BR.UTF-8"
LC_TIME="pt_BR.UTF-8"
LC_MONETARY="pt_BR.UTF-8"
LC_PAPER="pt_BR.UTF-8"
LC_NAME="pt_BR.UTF-8"
LC_ADDRESS="pt_BR.UTF-8"
LC_TELEPHONE="pt_BR.UTF-8"
LC_MEASUREMENT="pt_BR.UTF-8"
LC_IDENTIFICATION="pt_BR.UTF-8"

两个边缘的包裹都是UTF-8。我是否缺少另一种配置?

当您说'某些字段返回'时?"在诸如...'我假设您屏幕上显示的角色中,对吗?您不知道真正返回的内容,只知道屏幕上的内容。

要查看真正返回的东西,您可以做

之类的事情
select dump('£500') from dual;
DUMP('£500')             
--------------------------
Typ=96 Len=4: 163,53,48,48

edit :如下评论中所讨论的,如果您在终端上精确键入该命令,并且您确实有一个显示问题,那么您会在途中看到垃圾。而不是。,要查看数据库中存储的内容,您必须参考一个实际表格,以及其中包含这些字符串值的列。例如,如果列名是表TBL中的Col1,并且还有一个ID列,对于ID = 1000,您的Col1值带有磅符号,则运行

select dump(COL1) from TBL where ID = 1000;

显然,输入没有问题,因为输入不再有磅标牌(就像我的第一个示例一样(。但是在出门的路上,转储可能会显示出适当的字符 - 但是您的显示器无法正确显示。

结束编辑

如果您在转储中看到代码163,则意味着磅标牌在数据库中正确存储,并且问题就是如何在屏幕上显示。在这种情况下,您可能会出现NLS_LANG设置的问题。这里有很好的信息:

http://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html

如果您发现必须经常使用不同的角色集,则可能会仔细阅读本文。它将向您展示如何找出当前的角色集,如何更改它以及为什么人们会看的"明显"事物实际上不是很有帮助。这个问题不是太复杂,但也不是很琐碎。

最新更新