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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python中什么是pep_python技术应用认证证书有用吗

    python中什么是pep_python技术应用认证证书有用吗Python作为目前业界最受欢迎的语言,是大部分数据分析相关从业人员的一项必备技能。对于很多0基础的小白,经常会问的问题就是,如何快速学习Python。在这里给大家介绍一个Python入门级的考试:PCEP-30-01Exam。证书介绍PCEP-30-01是PythonInstitute资格认证的初级程序员考试,考试的全称是:PCEPCertifiedEntry-LevelPythonProgrammer这个考试并不需要有任何基础,是最入门级别的考试,对于从事数据分析的小伙伴们,这门考试只是

  • SpringBoot使用Websocket(一)

    SpringBoot使用Websocket(一)webSocket是HTML5的一种新协议,它实现了服务端与客户端的全双工通信,建立在传输层,tcp协议之上,即浏览器与服务端需要先建立tcp协议,再发送webSocket连接建立请求。webSocket的连接:客户端发送请求信息,服务端接受到请求并返回相应的信息。连接建立。客户端发送http请求时,通过Upgrade:webSocketConnection:Upgrade告知服务器需要建…

  • 半小时一篇文过完C语言基础知识点[通俗易懂]

    半小时一篇文过完C语言基础知识点[通俗易懂]本文定位读者为小白读者,将使用最快的方法学完C语言,并且制作一个学生管理系统。由于是速成的方法,本文不会描述过多的其它知识,大部分知识点只是描述了如何进行使用,如何深入还需要各位努力;不过学习过了一遍内容后,学习起来也会较为容易。环境:系统:windows7IDE:Devc面向读者:小白一、HelloWorldHelloWorld是经典的编程入门程序,指在编写代码生成程序,运行该程序将会在程序中显示HelloWorld。以下是一个HelloWorld的C语言代码:#include&

  • pytest指定用例_文件夹排列顺序自定义

    pytest指定用例_文件夹排列顺序自定义前言测试用例在设计的时候,我们一般要求不要有先后顺序,用例是可以打乱了执行的,这样才能达到测试的效果.有些同学在写用例的时候,用例写了先后顺序,有先后顺序后,后面还会有新的问题(如:上个用例返回

  • AMC7135_sip soc

    AMC7135_sip soc7.4SiamFC学习目标 目标 知道SiamFC的网络结构特点 掌握SiamFC的网络训练方式 应用 无 任意对象跟踪的问题是通过仅仅在线地学习对象外观的模型来解决,使用视频本身作为唯一的训练数据。尽管这些方法取得了成功,但他们的在线方法本质上限制了他们可以学习的模型的丰富性。需要跟踪的目标是通过起始帧的选择框给出的。框中可能是任意物体,甚至只是物体的某个部分。由于给定跟踪目标的不确定性,我们无法做到提前准备好数据,并且训练出一个.

  • 0xc0000225无法进系统_系统重装|电脑无法开机蓝屏错误代码0xc0000225故障问题「建议收藏」

    0xc0000225无法进系统_系统重装|电脑无法开机蓝屏错误代码0xc0000225故障问题「建议收藏」在重装系统的过程中,因为电脑机型,操作等因素,可能会导致重装系统出现一些问题。有的用户重装系统后发现电脑无法开机,显示蓝屏错误代码0xc0000225。为什么会出现这种情况呢?应该如何解决?下面就让小编为大家带来电脑无法开机蓝屏错误代码0xc0000225故障问题。一、原因分析:出现这样的现象是由于系统BCD文件被损坏或者说已经丢失了,通常都是一些用户在UEFI模式下安装GHOST系统导致的。,可…

发表回复

您的电子邮箱地址不会被公开。

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