oracle列标题干扰另一列

时间:2013-05-13 12:38:46

标签: oracle oracle10g

我对Oracle 10g数据库标题格式有疑问。 我有这个代码

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

列id是char(10)类型,其他列是varchar2(30)类型。结果是这个

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

正如你可以看到标题“Meno”干扰第一列而标题“Priezvisko”干扰第二列。我不明白为什么。我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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。同样有趣的是在每个会话中转储价值,使用'select dump('Rodné|číslo',1016)来自双重';与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)。在转储中显示为c4,8d的Unicode版本中,对于非unicode,它是从c3,84,c2,8d构建的。很明显,如何以及为什么导致你看到的效果超出了我对字符集的理解......