概述
通過實例
第一部份 字符類型
§
定長字符串
SQL> create table test_char(colA char(
Table created
SQL> insert into test_char values(
SQL> insert into test_char values(
SQL> insert into test_char values(
SQL> insert into test_char values(
SQL> insert into test_char values(
注意
SQL> insert into test_char values(
insert into test_char values(
ORA
SQL> select colA
COLA DUMP(COLA)
a Typ=
aa Typ=
aaa Typ=
aaaa Typ=
aaaaaaaaaa Typ=
注意
Len =
可以使用chr函數把ASCII碼轉成字符
SQL> select chr(
CHR(
a
要想知道一個字符的ASCII碼
SQL> select ascii(
ASCII(
Char類型是定長類型
使用char類型會浪費存儲空間
Oracle的數據類型的長度單位是字節
SQL> select dump(
DUMP(
Typ=
可見一個漢字在oracle中是占用了兩個字節的
英文字母或符號只占用一個字節
Char(
§
是一種變長的字符類型
SQL> create table test_varchar( col varchar
Table created
SQL> insert into test_varchar values(
SQL> insert into test_varchar values(
SQL> insert into test_varchar values(
SQL> insert into test_varchar values(
SQL> insert into test_varchar values(
SQL> select col
COL DUMP(COL)
a Typ=
aa Typ=
aaa Typ=
aaaaaaaaaa Typ=
Typ=
Len代表了每一行數據所占用的字節數
後面是具體的存儲值
由此可見
§
在
Byte就是字節
Char就是字符
Varchar
Varchar
Char(
Char(
一個字符占用多少個字節
如一個漢字占用兩個字節
查看當前系統采用的字符集
SQL> select * from nls_database_parameters where parameter =
PARAMETER VALUE
NLS_CHARACTERSET ZHS
如果在定義類型時
采用char為單位的好處是
比如
把數據表的某一列長度定義為可存放
Create table test_varchar(col_char varchar
這樣相對簡單一些
繼續實驗
SQL> create table test_varchar
Table created
Col_char列
Col_byte 列
當前的系統采用字符集為ZHS
試著在表中插入一些數據
SQL> insert into test_varchar
SQL> insert into test_varchar
SQL> insert into test_varchar
SQL> insert into test_varchar
insert into test_varchar
ORA
第一次
第二次
第三次
第四次
再看看每一行的存儲結構
SQL> select col_char
COL_CHAR DUMP(COL_CHAR)
a Typ=
袁 Typ=
袁袁袁袁袁袁袁袁袁袁 Typ=
當我們在col_char列插入
盡管我們在定義的時候是采用varchar
由此可見
在本例中
不信
SQL> desc test_varchar
Name Type Nullable Default Comments
COL_CHAR VARCHAR
COL_BYTE VARCHAR
當采用多字節的字符集時
當不知道當前數據庫采用的字符集
SQL> select lengthb(
LENGTHB(
§
SQL> create table test_char_varchar(char_col char(
Table created
SQL> insert into test_char_varchar values(
SQL> select * from test_char_varchar;
CHAR_COL VARCHAR_COL
Hello World Hello World
SQL> select * from test_char_varchar where char_col =
CHAR_COL VARCHAR_COL
Hello World Hello World
SQL> select * from test_char_varchar where varchar_col =
CHAR_COL VARCHAR_COL
Hello World Hello World
SQL> select * from test_char_varchar where varchar_col =char_col;
CHAR_COL VARCHAR_COL
這已經看出他們並不一樣
因為已經發生了隱式轉換
如果要讓char_col列與varchar_col列相等
第一種是
第二種是
SQL> select * from test_char_varchar where trim(char_col) = varchar_col;
CHAR_COL VARCHAR_COL
Hello World Hello World
SQL> select * from test_char_varchar where char_col = rpad(varchar_col
CHAR_COL VARCHAR_COL
Hello World Hello World
如果使用trim函數
此外還會在綁定變量時出現問題
From:http://tw.wingwit.com/Article/program/Oracle/201311/17771.html