varchar2 类型「建议收藏」

varchar2 类型「建议收藏」1、varchar2在数据库表中的最大长度是4000bytesorcharacter,在oracleplsqlvarchar2最大支持长度为32767个字节SQL>declare 2       v_varvarchar2(32767); 3     begin 4       null; 5     end; 6     /

大家好,又见面了,我是你们的朋友全栈君。

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149490.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月24日 下午8:16
下一篇 2022年6月24日 下午8:36


相关推荐

  • 飞书/钉钉/QQ 机器人一站式搞定!OpenClaw Docker 部署教程

    飞书/钉钉/QQ 机器人一站式搞定!OpenClaw Docker 部署教程

    2026年3月13日
    2
  • 金蝶K3-航天信息税控发票开票软件接口程序

    金蝶K3-航天信息税控发票开票软件接口程序##金蝶K3-航天信息税控发票开票软件接口程序用于从航天信息[上海爱信诺航天信息有限公司]税控发票开票软件(金税盘版)文本接口导出TXT文件中提取数据。###开发环境SharpDevelop5.0###调用库NPOI(用于EXCEL文件生成)###背景公司之前使用一个金蝶开发的…

    2022年6月8日
    148
  • google app(appstore安卓版下载)

    MiXCodecsapp是一款mix插件包,MiXCodecsapp整个在线的操作非常的简单,是没有任何的广告和收费问题的,MiXCodecsapp适合的类型比较多。软件介绍MiXCodecsapp是一个平滑的、功能齐全的文件管理应用程序MiXplorer文件管理器的插件工具,MiXCodecsapp让你有具有漂亮的界面,它支持批量移动和复制,以及各种分类,水平模式下无限制的标…

    2022年4月12日
    49
  • try catch里面try catch嵌套

    try catch里面try catch嵌套trycatch里能否内嵌trycatch?答案是肯定的。但是等内层trycatch出异常之后是个什么执行顺序呢?看下面代码staticvoidMain(string[]args){try{Console.WriteLine(“———————-外层try——————————“);error

    2022年6月16日
    28
  • 怎么反编译dll文件(反编译dll查看源代码)

    DLL(DynamicLinkLibrary)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。下载并解压.NETReflector,下面下载为绿色7.3.0.18版本;(注:此为英文版,百度有汉化版下载)链接:https://pan.baidu.com/s/1eoWFe62wA_uOdn3wTQ7e-w密码:gt87…

    2022年4月12日
    103
  • 漏扫工具 nessus_黑客漏洞扫描工具

    漏扫工具 nessus_黑客漏洞扫描工具零基础学黑客,搜索公众号:白帽子左一原文地址:https://blog.csdn.net/wwl012345/article/details/96998187一、Nessus简单介绍Nessus是全球使用人数最多的系统漏洞扫描与分析软件,这是一个免费、威力强大、更新频繁并简易使用的远端系统安全扫描程序,功能十分强大。二、Nessus安装下载软件包的时候一定要找一个网速很好并且稳定的地方,最好不要使用热点,这是前人之鉴。(1):下载软件包进入官网下载https://www.tenable.c

    2022年10月19日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号