日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

varchar2 类型「建议收藏」

發布時間:2023/12/19 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 varchar2 类型「建议收藏」 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 、varchar2 在數據庫表中的最大長度是4000 bytes or character,在 oracle plsql varchar2最大支持長度為32767個字節

SQL> declare
2 v_var varchar2(32767);
3 begin
4 null;
5 end;
6 /

PL/SQL 過程已成功完成。

SQL> declare
2 v_var varchar2(32768);
3 begin
4 null;
5 end;
6 /
v_var varchar2(32768);
*
第 2 行出現錯誤:
ORA-06550: 第 2 行, 第 22 列:
PLS-00215: 字符串長度限制在范圍 (1…32767)

SQL> declare
2 v_var varchar2(32767 byte);
3 v_char varchar2(32767 char);
4 begin
5 v_var := lpad(‘a’,32767,’a’);
6 dbms_output.put_line(length(v_var));
7 v_char := lpad(‘中’,32767,’中’);
8 dbms_output.put_line(lengthb(v_var));
9 v_var := lpad(‘中’,32768,’中’);
10 end;
11 /
declare
*
第 1 行出現錯誤:
ORA-06502: PL/SQL: 數字或值錯誤 : 字符串緩沖區太小
ORA-06512: 在 line 9

2 、索引的長度有限制

SQL> create table t ( a varchar2(4000), b varchar2(4000));

表已創建。

SQL> create index i on t(a,b);
create index i on t(a,b)
*
第 1 行出現錯誤:
ORA-01450: 超出最大的關鍵字長度 (6398)

3、

ORACLE中VARCHAR2類型的字段長度是按照byte來定義的。如果數據庫使用的字符集是GBK,GB2312或者其他定長字符集的話,這個問題似乎可以被忽略,因為只要把數據庫的字段長度/2就可以得到你要限制插入該字段的中文長度了。 但是,如果數據庫的字符集是UTF-8呢,杯具了吧,人家是變長的。

其實人家ORACLE沒這么笨,本來就可以用字符為單位來定義varchar2的長度的,這個時候需要注意在建表時這樣寫:createtable ABC_TABLE (A_FIELD varchar2(20 char))

這個varchar2(2 char)就表示了是用字符為單位來定義了,而默認情況下的varchar2(2)這樣就是字節!

SQL> create table AB (A varchar2(2 char)) ;

表已創建。

SQL> insert into ab values(‘如果’);

已創建 1 行。

SQL> commit;

提交完成。

SQL> select *From ab;

A
—-
如果

SQL> create table ABc (A varchar2(2)) ;

表已創建。

SQL> insert into abc values(‘如果’);
insert into abc values(‘如果’)
*
第 1 行出現錯誤:
ORA-12899: 列 “SCOTT”.”ABC”.”A” 的值太大 (實際值: 4, 最大值: 2)

如果你不確定數據庫里究竟是怎么定義,你想找出所有采用字節定義長度的字段,

select * from user_tab_columnswhere CHAR_USED=‘B’

這里的CHAR_USED的意思是:如果是字符定義-‘C’,字節定義-‘B’

4VARCHA2可能導致的問題是行遷移。

如果varchar2列被修改,而且修改后數據長度增大,這會引起‘行遷移’(Row Migration),造成多余的I/O。主要影響:行遷移和行鏈接,直接導致數據讀取和寫入IO增多

5 varhcar2和char的區別

SQL> create table t( a varchar2(3),b char(3));

表已創建。

SQL> insert into t values(‘a’,’a’);

已創建 1 行。

SQL> commit;

提交完成。

SQL> select *From t;

A B
— —
a a

SQL> select dump(a),dump(b) from t;

DUMP(A)
——————————————————————————–
DUMP(B)
——————————————————————————–
Typ=1 Len=1: 97
Typ=96 Len=3: 97,32,32

從dump中可以看出varchar2的存儲長度是1,而char類型的長度是3,其余空間被空格填充;

參考:http://doingwell.iteye.com/blog/972938

http://www.linuxidc.com/Linux/2012-03/56006.htm

總結

以上是生活随笔為你收集整理的varchar2 类型「建议收藏」的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。