字元型別的字元儲存與位元組儲存
Oracle中儲存字元常用的資料型別有char和varchar2
其中
char 是定長,最小為1,最大為2000
varchar2 是變長,最小為1,最大為4000
在使用過程中,常見的定義
col char(n) --位元組儲存的預設形式
col char(n byte) --位元組儲存
col char(n char) --字元儲存
col varchar2(n) --位元組儲存的預設形式
col varchar2(n byte) --位元組儲存
col varchar2(n char) --字元儲存
位元組儲存表示最長能儲存n個位元組的字串。
字元儲存表示最長能儲存n個字元的字串。
例:
建立表t_char
create table t_char
(col_a char(5)
,col_b char(5 char)
);
插入記錄
SQL> insert into t_char values ('aaaa','aaaa');
1 row inserted
檢視錶兩個欄位的位元組長度和字元長度
SQL> select length(col_a),length(col_b) from t_char;
LENGTH(COL_A) LENGTH(COL_B)
------------- -------------
5 5
SQL> select lengthb(col_a),lengthb(col_b) from t_char;
LENGTHB(COL_A) LENGTHB(COL_B)
-------------- --------------
5 5
char是定長,所以佔用的位元組和字元一定是固定的。
插入第二條記錄
SQL> insert into t_char values ('bbb11','bbb11');
1 row inserted
由於使用的是字母和數字組合的值,即滿足5個位元組又滿足5個字元,能插入,看不出兩個欄位的區別。
下面使用中文,如果值為'資料庫',會出現什麼情況?
insert into t_char values ('資料庫','資料庫')
ORA-12899: 列 "SCOTT"."T_CHAR"."COL_A" 的值太大 (實際值: 6, 最大值: 5)
報錯!col_a char(5) 位元組長度最大為5,三個中文字元6位元組超長。
所以col_a char(5) 位元組長度定義 與 col_b char(5 char) 字元長度定義的區別如下
SQL> insert into t_char values ('資料1','我愛資料庫');
1 row inserted
檢視插入值的字元長度
SQL> select length('資料1'),length('我愛資料庫') from dual;
LENGTH('資料1') LENGTH('我愛資料庫')
--------------- --------------------
3 5
檢視插入值的位元組長度
SQL> select lengthb('資料1'),lengthb('我愛資料庫') from dual;
LENGTHB('資料1') LENGTHB('我愛資料庫')
---------------- ---------------------
5 10
col_b char(5 char)表示最長能儲存5個字元,包括中文字元,如果5個字元都是中文字元,位元組長度佔10個位元組(字符集GBK)
varchar型別的定義也是類似的,不再贅述
其中
char 是定長,最小為1,最大為2000
varchar2 是變長,最小為1,最大為4000
在使用過程中,常見的定義
col char(n) --位元組儲存的預設形式
col char(n byte) --位元組儲存
col char(n char) --字元儲存
col varchar2(n) --位元組儲存的預設形式
col varchar2(n byte) --位元組儲存
col varchar2(n char) --字元儲存
位元組儲存表示最長能儲存n個位元組的字串。
字元儲存表示最長能儲存n個字元的字串。
例:
建立表t_char
create table t_char
(col_a char(5)
,col_b char(5 char)
);
插入記錄
SQL> insert into t_char values ('aaaa','aaaa');
1 row inserted
檢視錶兩個欄位的位元組長度和字元長度
SQL> select length(col_a),length(col_b) from t_char;
LENGTH(COL_A) LENGTH(COL_B)
------------- -------------
5 5
SQL> select lengthb(col_a),lengthb(col_b) from t_char;
LENGTHB(COL_A) LENGTHB(COL_B)
-------------- --------------
5 5
char是定長,所以佔用的位元組和字元一定是固定的。
插入第二條記錄
SQL> insert into t_char values ('bbb11','bbb11');
1 row inserted
由於使用的是字母和數字組合的值,即滿足5個位元組又滿足5個字元,能插入,看不出兩個欄位的區別。
下面使用中文,如果值為'資料庫',會出現什麼情況?
insert into t_char values ('資料庫','資料庫')
ORA-12899: 列 "SCOTT"."T_CHAR"."COL_A" 的值太大 (實際值: 6, 最大值: 5)
報錯!col_a char(5) 位元組長度最大為5,三個中文字元6位元組超長。
所以col_a char(5) 位元組長度定義 與 col_b char(5 char) 字元長度定義的區別如下
SQL> insert into t_char values ('資料1','我愛資料庫');
1 row inserted
檢視插入值的字元長度
SQL> select length('資料1'),length('我愛資料庫') from dual;
LENGTH('資料1') LENGTH('我愛資料庫')
--------------- --------------------
3 5
檢視插入值的位元組長度
SQL> select lengthb('資料1'),lengthb('我愛資料庫') from dual;
LENGTHB('資料1') LENGTHB('我愛資料庫')
---------------- ---------------------
5 10
col_b char(5 char)表示最長能儲存5個字元,包括中文字元,如果5個字元都是中文字元,位元組長度佔10個位元組(字符集GBK)
varchar型別的定義也是類似的,不再贅述
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28929558/viewspace-1169961/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 彙編——位元組單元和字單元儲存雙字元字元
- Oracle 儲存型別Oracle型別
- 建立NFS型別的儲存NFS型別
- 分享:大端小端-位元組儲存順序
- nodejs圖片轉換位元組儲存NodeJS
- 轉摘_儲存型別與連線方式型別
- oracle資料型別與儲存結構Oracle資料型別
- 二叉樹的儲存(輸入一串字元)與遍歷二叉樹字元
- 讓Dapper+SqlCE支援ntext資料型別和超過4000字元的儲存APPSQL資料型別字元
- 作業系統ENDIAN(位元組儲存次序)作業系統
- 儲存選型與規劃
- 關於SQLServer中的字元儲存的問題的測試SQLServer字元
- Python字元與位元組新編Python字元
- Block型別及儲存區域BloC型別
- Oracle Lob型別儲存淺析Oracle型別
- 儲存過程與儲存函式儲存過程儲存函式
- JavaScript中的資料型別-儲存差別JavaScript資料型別
- MYSQL 資料型別儲存-數值型MySQL 資料型別
- 關於SQL Server中的字元儲存的問題的測試SQLServer字元
- 塊儲存 檔案儲存 物件儲存物件
- mysql儲存日期使用什麼型別MySql型別
- SAP EWM - 儲存型別 - 入庫控制型別
- redis-4.資料儲存型別Redis型別
- MYSQL-資料型別儲存-DATEMySql資料型別
- 字元,位元組和編碼字元
- 雲原生儲存詳解:容器儲存與 K8s 儲存卷K8S
- CUDA儲存器組織
- 為什麼儲存密碼字元陣列比字串更合適?密碼字元陣列字串
- Unirech:阿里雲國際站的物件儲存oss與自建儲存的區別阿里物件
- 儲存新圖譜:DNA儲存的邊界與天地
- 面試必問的 Java 位元組流與字元流面試Java字元
- java的IO操作:位元組流與字元流操作Java字元
- nodejs字元與位元組之間的轉換NodeJS字元
- PHP memcached 各種資料型別儲存PHP資料型別
- 【精】C語言之變數儲存型別C語言變數型別
- 【MySQL】時間型別儲存格式選擇MySql型別
- 儲存單位b與B的區別
- 行式儲存 列式儲存