[20160325]bbed 中文字元顯示的顯示問題

lfree發表於2016-03-25

[20160325]bbed 中文字元顯示的顯示問題.txt

--如果使用bbed檢視記錄存在一個小問題,如果裡面的字元包含中文,顯示的是亂碼,今天正好看一個英文資料庫,字符集
--AMERICAN_AMERICA.US7ASCII,發現中文居然可以正常顯示,這樣如果使用bbed看中文完成可以改變字符集來檢視。自己
--在中文資料庫測試看看。

1.環境:
SCOTT@book> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

$ env | grep NLS
NLS_LANG=AMERICAN_AMERICA.zhs16gbk
NLS_TIMESTAMP_TZ_FORMAT=YYYY-MM-DD HH24:MI:SS.FF TZH:TZM
NLS_TIMESTAMP_FORMAT=YYYY-MM-DD HH24:MI:SS.FF
NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS

2.建立測試表:
SCOTT@book> create table tx (id number,name varchar2(20),cr_date date);
Table created.

insert into tx  values (1,'中文測試',sysdate);
insert into tx  values (2,'a1234',sysdate);
commit ;
alter system checkpoint ;

SCOTT@book> select rowid,tx.* from tx ;
ROWID                      ID NAME                 CR_DATE
------------------ ---------- -------------------- -------------------
AAAWe0AAEAAAAI7AAA          1 中文測試             2016-03-25 10:17:26
AAAWe0AAEAAAAI7AAB          2 a1234                2016-03-25 10:17:37

SCOTT@book> @ &r/rowid AAAWe0AAEAAAAI7AAA
    OBJECT       FILE      BLOCK        ROW DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
     92084          4        571          0 4,571                alter system dump datafile 4 block 571 ;

3.使用bbed觀察:
$ env | grep NLS_LANG
NLS_LANG=AMERICAN_AMERICA.zhs16gbk

BBED> set dba  4,571
        DBA             0x0100023b (16777787 4,571)

BBED> p * kdbr[1]
rowdata[0]
----------
ub1 rowdata[0]                              @8145     0x2c

BBED> x /2rnct
rowdata[0]                                  @8145
----------
flag@8145: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8146: 0x01
cols@8147:    3

col    0[2] @8148: 2
col    1[5] @8151: a1234
col    2[7] @8157: 2016-03-25 10:17:37

rowdata[20]                                 @8165
-----------
flag@8165: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8166: 0x01
cols@8167:    3

col    0[2] @8168: 1
col    1[8] @8171: ........
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
col    2[7] @8180: 2016-03-25 10:17:26

--可以發現~處顯示...,無法顯示中文。

4.如果定義export NLS_LANG=AMERICAN_AMERICA.US7ASCII,再測試:
$ env | grep NLS_LANG
NLS_LANG=AMERICAN_AMERICA.US7ASCII

BBED> x /2rnct
rowdata[0]                                  @8145
----------
flag@8145: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8146: 0x01
cols@8147:    3

col    0[2] @8148: 2
col    1[5] @8151: a1234
col    2[7] @8157: 2016-03-25 10:17:37

rowdata[20]                                 @8165
-----------
flag@8165: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8166: 0x01
cols@8167:    3

col    0[2] @8168: 1
col    1[8] @8171: 中文測試
col    2[7] @8180: 2016-03-25 10:17:26

--補充注意,如果在這個環境下插入中文,會出現亂碼?補充測試:
$ env | grep NLS_LANG
NLS_LANG=AMERICAN_AMERICA.US7ASCII

SCOTT@book> insert into tx  values (3,'文化',sysdate);
1 row created.

SCOTT@book> commit ;
Commit complete.

SCOTT@book> select rowid,tx.* from tx;
ROWID                      ID NAME                 CR_DATE
------------------ ---------- -------------------- -------------------
AAAWe0AAEAAAAI7AAA          1 ????                 2016-03-25 10:17:26
AAAWe0AAEAAAAI7AAB          2 a1234                2016-03-25 10:17:37
AAAWe0AAEAAAAI+AAA          3 ????                 2016-03-25 10:24:23
--顯示亂碼。修改回來:

$ export NLS_LANG=AMERICAN_AMERICA.zhs16gbk
SCOTT@book> select rowid,tx.* from tx;
ROWID                      ID NAME                 CR_DATE
------------------ ---------- -------------------- -------------------
AAAWe0AAEAAAAI7AAA          1 中文測試             2016-03-25 10:17:26
AAAWe0AAEAAAAI7AAB          2 a1234                2016-03-25 10:17:37
AAAWe0AAEAAAAI+AAA          3 ????                 2016-03-25 10:24:23

--原來插入的顯示正常,但是在英文字符集US7ASCII下插入的顯示亂碼,這點在以後工作中注意。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2063563/,如需轉載,請註明出處,否則將追究法律責任。

相關文章