1.1 char
定長字符串,會用空格來填充來達到其最大長度,最長2000個字節。
1. 新建一個測試表test_char.,只有一個char類型的列。長度為10
SQL> create table test_char(colA char(10));
Table created
2. 向這個表中插入一些數據。
SQL> insert into test_char values('a');
1 row inserted
SQL> insert into test_char values('aa');
1 row inserted
SQL> insert into test_char values('aaa');
1 row inserted
SQL> insert into test_char values('aaaa');
1 row inserted
SQL> insert into test_char values('aaaaaaaaaa');
1 row inserted
注意:最多只能插入10個字節。否是就報錯。
SQL> insert into test_char values('aaaaaaaaaaa');
insert into test_char values('aaaaaaaaaaa')
ORA-12899: value too large for column "PUB_TEST"."TEST_CHAR"."COLA" (actual: 11, maximum: 10)
3.在Oracle 數據類型中使用dump函數可以查看每一行的內部存數結構。
SQL> select colA, dump(colA) from test_char;
COLA DUMP(COLA)
a Typ=96 Len=10: 97,32,32,32,32,32,32,32,32,32
aa Typ=96 Len=10: 97,97,32,32,32,32,32,32,32,32
aaa Typ=96 Len=10: 97,97,97,32,32,32,32,32,32,32
aaaa Typ=96 Len=10: 97,97,97,97,32,32,32,32,32,32
aaaaaaaaaa Typ=96 Len=10: 97,97,97,97,97,97,97,97,97,97
注意:Typ=96 表示數據類型的ID。Oracle為每一種數據類型都進行了編號。說明char類型的編號是96.
Len =10 表示所在的內部存儲的長度(用字節表示)。雖然第一例只存了一個字符’a’,但是它還是占用了10個字節的空間。
97,32,32,32,32,32,32,32,32,32 表示內部存儲方式。可見Oracle的內部存儲是以數據庫字符集進行存儲的。
97正好是字符a的ASCII碼。
可以使用chr函數把ASCII碼轉成字符。
SQL> select chr(97) from dual;
CHR(97)
a
要想知道一個字符的ASCII碼,可以使用函數ascii
SQL> select ascii('a') from dual;
ASCII('A')
97
32正好是空格的ascii碼值。
Char類型是定長類型。它總會以空格來填充以達到一個固定寬度。
使用char類型會浪費存儲空間。
Oracle的數據類型的長度單位是字節。
SQL> select dump('漢') from dual;
DUMP('漢')
Typ=96 Len=2: 186,186
可見一個漢字在Oracle中是占用了兩個字節的。
英文字母或符號只占用一個字節。
Char(10)最多可存放5個漢字。