2013-05-13 38 views
1

我有Oracle 10g数据库headig格式的问题。 我有此代码oracle列标题干扰到另一列

COLUMN id HEADING "Rodné|číslo" FORMAT A10 
COLUMN name HEADING "Meno" FORMAT A20 
COLUMN surname HEADING "Priezvisko" FORMAT A20 
--some select here 

色谱柱内径为CHAR(10)类型,其他列是VARCHAR2(30)的类型。结果是这样的

Rodné 
číslo Meno   Priezvisko 
---------- -------------------- -------------------- 
7951051548 Bohdana    Filcova 
4054207561 Bohumila    Kmecova 

正如你可以看到标题“美诺”干涉过第一栏和标题“Priezvisko”干涉第二。我不明白为什么。我该如何解决这个问题?

回答

1

这似乎是一个字符集问题。 SQL * Plus支持globalisation,因此您使用的其中一个字符可能不在您会话的字符集中。如果我设置我的NLS_LANG:

export NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1" 

Rodné 
číslo Meno   Priezvisko 
---------- -------------------- -------------------- 
7951051548 Bohdana    Filcova 
4054207561 Bohumila    Kmecova 

...然后我得到相同的行为,你做。 (它稍微修改,但不是由set tab off修复)。如果我更改了会议UTF8然后对齐正确:

export NLS_LANG="ENGLISH_UNITED KINGDOM.UTF8" 

Rodné 
číslo  Meno     Priezvisko 
---------- -------------------- -------------------- 
7951051548 Bohdana    Filcova 
4054207561 Bohumila    Kmecova 

这是在11gR2中,顺便说一下,所以它不是一个Oracle 10g的问题;我的数据库字符集是AL32UTF8。同样有趣的是,在每次会议中转储价值,'选择转储'('Rodné|číslo',1016)from dual';与WE8ISO8859P1:

DUMP('RODNé|číSLO',1016) 
-------------------------------------------------------------------------------- 
Typ=96 Len=20 CharacterSet=AL32UTF8: 52,6f,64,6e,c3,83,c2,a9,7c,c3,84,c2,8d,c3,8 
3,c2,ad,73,6c,6f 

...与UTF8:

DUMP('RODNÉ|ČÍSLO',1016) 
-------------------------------------------------------------------------------- 
Typ=96 Len=14 CharacterSet=AL32UTF8: 52,6f,64,6e,c3,a9,7c,c4,8d,c3,ad,73,6c,6f 

想必与前它认为输出占用更多的空间比实际的,所以它是不填充标题非常正确。

č似乎是问题所在。它是defined in Unicode,但不是在WE8ISO8859P1WE8MSWIN1252(源自here)。在转储中显示的Unicode版本为c4,8d,而对于非Unicode版本,则从c3,84,c2,8d开始构建。相当多的以及为什么导致你看到的效果超出了我对字符集的理解......

+0

谢谢,它的工作原理就像你写的。 – CoCumis 2013-05-13 15:13:25