1

I have problem with Oracle 10g database headig format. I have this code

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

Column id is char(10) type, other columns are varchar2(30) type. Result is this

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

As you can see header "Meno" interferes to first column and header "Priezvisko" interferes to second. I can't understand why. How can I solve this issue?

4

1 回答 1

1

这似乎是一个字符集问题。SQL*Plus 支持全球化,因此您使用的字符之一可能不在会话的字符集中。如果我设置我的 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) 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

据推测,对于前者,它认为输出占用的空间比实际空间多,因此它没有正确填充标题。

č似乎是问题所在。它是在 Unicode 中定义的,但不是在WE8ISO8859P1WE8MSWIN1252 中(来自这里)。在转储中显示为 的 Unicode 版本中c4,8d,对于非 Unicode 版本,它是从c3,84,c2,8d. 导致您看到的效果的方式和原因超出了我对字符集的理解......

于 2013-05-13T14:40:03.763 回答