精华内容
下载资源
问答
  • VARCHAR2的最大长度是32767还是4000

    千次阅读 2018-02-07 00:50:33
    VARCHAR2的最大长度是32767还是4000?截止目前的答案应该是这样的:1.Oracle12c之前的版本,表字段类型最大长度是4000个字节;(Oracle12c通过设置初始化参数MAX_SQL_STRING_SIZE为EXTENDED可以支持到32767个字节)2....

    VARCHAR2的最大长度是32767还是4000?

    截止目前的答案应该是这样的:

    1.Oracle12c之前的版本,表字段类型最大长度是4000个字节;

    (Oracle12c通过设置初始化参数MAX_SQL_STRING_SIZE为EXTENDED可以支持到32767个字节)

    2.PLSQL环境中VARCHAR2变量的最大长度是32767个字节;

    可以通过几个测试观察一下VARCHAR2变量类型的特性:

    1.Oracle的表字段类型最大支持到VARCHAR2(4000)


    2.在PLSQL环境下申明变量时可以用到VARCHAR2(32767),但是赋值时实际最大只有4000


    这里有个有趣的对比:

    V0通过变量赋值,V2通过SQL赋值,结果V1的长度是32767,而V2的长度只有4000。

    3.4000是指字节,如果是N字节的字符,最大可填充4000/N个字符。

    比如GBK汉字占2个字符,就只能放2000个汉字。


    4.VARCHAR2变量可以带字符(CHAR)或字节(BYTE)限定词,默认是由初始化参数NLS_LENGTH_SEMANTICS决定的


    5.CHAR和BYTE限定词的作用,变量按字节统计(lengthb)的容量CHAR是BYTE的N倍(取决于数据库字符集)


    这个代码中,V0最多只能容下1000个中文字,但是将2000个中文字赋值给它,没有报错,只是截取了前1000个中文字;如果将2001个中文字赋值给V0,就会报错了,因此赋值时的语法分析只是判断了长度,并没有判断字符集的影响。


    展开全文
  • varchar2的长度,最大可以

    千次阅读 2018-08-24 15:50:36
    今天在看12c的administrator 文档,按照上面的语句,创建表的时候出错。提示ORA-00910 C##BB@win12c>CREATE TABLE admin_emp ( ... 3 ename VARCHAR2(15) NOT NULL, 4 ssn NUMBER(9) ENCRYPT USING '...

    今天在看12c的administrator  文档,按照上面的语句,创建表的时候出错。提示ORA-00910

    C##BB@win12c>CREATE TABLE admin_emp (
      2  empno NUMBER(5) PRIMARY KEY,
      3  ename VARCHAR2(15) NOT NULL,
      4  ssn NUMBER(9) ENCRYPT USING 'AES256',
      5  job VARCHAR2(10),
      6  mgr NUMBER(5),
      7  hiredate DATE DEFAULT (sysdate),
      8  photo BLOB,
      9  sal NUMBER(7,2),
     10  hrly_rate NUMBER(7,2) GENERATED ALWAYS AS (sal/2080),
     11  comm NUMBER(7,2),
     12  deptno NUMBER(3) NOT NULL
     13  CONSTRAINT admin_dept_fkey REFERENCES hr.departments
     14  (department_id),
     15  comments VARCHAR2(32767),
     16  status VARCHAR2(10) INVISIBLE)
     17  TABLESPACE users
     18  STORAGE ( INITIAL 50K);
    comments VARCHAR2(32767),
                      *
    第 15 行出现错误:
    ORA-00910: 指定的长度对于数据类型而言过长

    仔细看了下文档,文档上说varchar2等从12c开始,最大长度是32767bytes,而且这里有一个参数max_string_size限制,改参数默认值是4000,最大是32767.

    如果想修改改值,需要参考Oracle的文档进行修改,而不是仅仅修改这个参数。

    具体的参考文档如下:

    https://docs.oracle.com/database/121/REFRN/GUID-D424D23B-0933-425F-BC69-9C0E6724693C.htm#REFRN10321

    END

     

    展开全文
  • ORACLE VARCHAR2最大长度问题

    千次阅读 2019-04-25 15:53:08
    VARCHAR2数据类型的最大长度问题,是一个让人迷惑的问题,因为VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型。简单的说,要看你在什么应用场景下,否则难以回答VARCHAR2数据类型的...

    VARCHAR2数据类型的最大长度问题,是一个让人迷惑的问题,因为VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型。简单的说,要看你在什么应用场景下,否则难以回答VARCHAR2数据类型的最大长度问题。

    ORACLE数据库字段类型

    关于Oracle Database中的字段的VARCHAR2类型的最大长度,我们先看下面的例子:

    SQL> create table test ( name varchar2(4001) );
    create table test ( name varchar2(4001) )                                  *
    ERROR at line 1:
    ORA-00910: specified length too long for its datatype
    
    SQL> create table test ( name varchar2(4000) ); 
    
    Table created.

    clip_image001

    如上所示,在Oracle Database中,VARCHAR2字段类型,最大值为4000,SQL参考手册中也明确指出VARCHAR2的最大大小为4000,注意此处的最大长度是指字节长度,而不是指字符个数。这个跟参数NLS_LENGTH_SEMANTICS有一定关系,如下所示,当参数NLS_LENGTH_SEMANTICS为字节时,定义的变量长度为字节长度

    如下所示,本数据库NLS_CHARACTERSET值为AL32UTF8,一个汉字占三个字节

    SQL> ALTER SESSION SET NLS_LENGTH_SEMANTICS=BYTE; 
    
    Session altered 
    
    SQL> DROP TABLE TEST PURGE; 
    
    Table dropped 
    
    SQL> CREATE TABLE TEST ( NAME VARCHAR2(7)); 
    
    Table created 
    
    SQL> INSERT INTO TEST VALUES ('字'); 
    
    1 row inserted 
    
    SQL> COMMIT; 
    SQL> INSERT INTO TEST VALUES('字字字'); 
    
    INSERT INTO TEST VALUES('字字字') 
    
    ORA-12899: value too large for column "SYSTEM"."TEST"."NAME" (actual: 9, maximum: 7) 
    
    SQL> SELECT LENGTH(NAME), LENGTHB(NAME) FROM TEST; 
    
    LENGTH(NAME) LENGTHB(NAME) 
    
    ------------ ------------- 
    
    1 3 

    如果将参数NLS_LENGTH_SEMANTICS,则定义VARCHAR2(7)表示

    SQL> ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR; 
    
    Session altered 
    
    SQL> DROP TABLE TEST; 
    
    Table dropped 
    
    SQL> CREATE TABLE TEST ( NAME VARCHAR2(7)); 
    
    Table created 
    
    SQL> INSERT INTO TEST VALUES ('字'); 
    
    1 row inserted 
    
    SQL> COMMIT; 
    
    Commit complete 
    
    SQL> INSERT INTO TEST VALUES('字字字'); 
    
    1 row inserted 
    
    SQL> COMMIT; 
    
    Commit complete 
    SQL> SELECT LENGTH(NAME), LENGTHB(NAME) FROM TEST; 
    
    LENGTH(NAME) LENGTHB(NAME) 
    
    ------------ ------------- 
    
    1                 3 
    
    3                 9 
    
    Commit complete 
    

    不管参数NLS_LENGTH_SEMANTICS取值为字符或字节,其所能容纳的字符串的字节数都不能超过4000.

     

    PL/SQL变量类型:

    接下来我们看看PL/SQL中VARCHAR2变量类型,如下官方文档所示,它的最大字节长度为32767,所能容纳的字符个数取决于字符集。

     

    Declaring Variables for Multibyte Characters

    The maximum size of a CHAR or VARCHAR2 variable is 32,767 bytes, whether you specify the maximum size in characters or bytes. The maximum number of characters in the variable depends on the character set type and sometimes on the characters themselves:

    Character Set Type

    Maximum Number of Characters

    Single-byte character set

    32,767

    n-byte fixed-width multibyte character set (for example, AL16UTF16)

    FLOOR(32,767/n)

    n-byte variable-width multibyte character set with character widths between 1 and n bytes (for example, JA16SJIS or AL32UTF8)

    Depends on characters themselves—can be anything from 32,767 (for a string containing only 1-byte characters) through FLOOR(32,767/n) (for a string containing only n-byte characters).

    When declaring a CHAR or VARCHAR2 variable, to ensure that it can always hold n characters in any multibyte character set, declare its length in characters—that is, CHAR(n CHAR) or VARCHAR2(n CHAR), where n does not exceed FLOOR(32767/4) = 8191.

    可以通过下面一个PL/SQL代码来验证一下,如下所示,可以定义一个VARCHAR2类型的变量,给其赋值6000个字符串。

     
    DECLARE
        V_OUT VARCHAR2(32767);
    BEGIN
         V_OUT := RPAD('T', 6000, 'M');
         DBMS_OUTPUT.PUT_LINE(LENGTH(V_OUT));
    END;

    如果给VARCHAR2类型变量赋值超过23767,就会报PLS-00215: String length constraints must be in range (1 .. 32767)错误。

    DECLARE
        V_OUT VARCHAR2(32768);
    BEGIN
         V_OUT := RPAD('T', 5000, 'M');
         DBMS_OUTPUT.PUT_LINE(LENGTH(V_OUT));
    END;

    clip_image002

    展开全文
  • url:... 2014-07-09 15:53 by 潇湘隐者, 作者:潇湘隐者 ... 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. ...VARCHAR2数据类型的最
     
    

    2014-07-09 15:53 by 潇湘隐者,

    作者: 潇湘隐者
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

    VARCHAR2数据类型的最大长度问题,是一个让人迷惑的问题,因为VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型。简单的说,要看你在什么应用场景下,否则难以回答VARCHAR2数据类型的最大长度问题。

    oracle数据库字段类型

    关于Oracle Database中的字段的VARCHAR2类型的最大长度,我们先看下面的例子:

    SQL> create table test ( name varchar2(4001) );
    create table test ( name varchar2(4001) )
                                      *
    ERROR at line 1:
    ORA-00910: specified length too long for its datatype
     
     
    SQL> create table test ( name varchar2(4000) ); 
     
    Table created.

    clip_image001

    如上所示,在Oracle Database中,VARCHAR2字段类型,最大值为4000,SQL参考手册中也明确指出VARCHAR2的最大大小为4000,注意此处的最大长度是指字节长度,而不是指字符个数。这个跟参数NLS_LENGTH_SEMANTICS有一定关系,如下所示,当参数NLS_LENGTH_SEMANTICS为字节时,定义的变量长度为字节长度

    如下所示,本数据库NLS_CHARACTERSET值为AL32UTF8,一个汉字占三个字节

    SQL> ALTER SESSION SET NLS_LENGTH_SEMANTICS=BYTE; 
     
    Session altered 
     
    SQL> DROP TABLE TEST PURGE; 
     
    Table dropped 
     
    SQL> CREATE TABLE TEST ( NAME VARCHAR2(7)); 
     
    Table created 
     
    SQL> INSERT INTO TEST VALUES ('字'); 
     
    1 row inserted 
     
    SQL> COMMIT; 
     
    Commit complete 
     
    SQL> INSERT INTO TEST VALUES('字字字'); 
     
    INSERT INTO TEST VALUES('字字字') 
     
    ORA-12899: value too large for column "SYSTEM"."TEST"."NAME" (actual: 9, maximum: 7) 
     
    SQL> SELECT LENGTH(NAME), LENGTHB(NAME) FROM TEST; 
     
    LENGTH(NAME) LENGTHB(NAME) 
     
    ------------ ------------- 
     
    1 3 
     

    如果将参数NLS_LENGTH_SEMANTICS,则定义VARCHAR2(7)表示

    SQL> ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR; 
     
    Session altered 
     
    SQL> DROP TABLE TEST; 
     
    Table dropped 
     
    SQL> CREATE TABLE TEST ( NAME VARCHAR2(7)); 
     
    Table created 
     
    SQL> INSERT INTO TEST VALUES ('字'); 
     
    1 row inserted 
     
    SQL> COMMIT; 
     
    Commit complete 
     
    SQL> INSERT INTO TEST VALUES('字字字'); 
     
    1 row inserted 
     
    SQL> COMMIT; 
     
    Commit complete 
     
    SQL> SELECT LENGTH(NAME), LENGTHB(NAME) FROM TEST; 
     
    LENGTH(NAME) LENGTHB(NAME) 
     
    ------------ ------------- 
     
    1                 3 
     
    3                 9 
     

    不管参数NLS_LENGTH_SEMANTICS取值为字符或字节,其所能容纳的字符串的字节数都不能超过4000.


    oracle中有三种比较常用的类型:varchar2(byte)varchar2(char)nvarchar2()

    那么这三种类型到底有什么区别呢?

    首先,我们要时刻记清:无论是varchar2还是nvarchar2最大字节数都是4000

    ALTER SESSION SET NLS_LENGTH_SEMANTICS= byte | char;

    varchar2(byte):就是默认的表示方式,比如我们写成:varchar2(100),就相当于varchar2(100 byte),表示最大字节数是100,该字段最多能容纳100个字节,强调空间大小。

    由于我们描述的是字节,因此,保存汉字等字符时,就要小心了。如果你的数据库用的是GBK编码,那么一个汉字将占用2个字节,最多能存50个汉字,如果你的数据库用的是UTF8编码,那么一个汉字将占用3个字节,最多能存33个汉字。

    varchar2(char):表示最大字符数是100,该字段最多能容纳100个字符,强调个数。假设我们写成varchar2(100char),那么无论是数字、字母、汉字,都看成一个字符,最多写100个,当然,汉字越多,占用的空间越大,同样遵循上边的数据库编码原则。例如:存入一个汉字,底层占23个字节,存入一个字母,占1个字节,绝对不是某些文章所说1个字母或数字也占23个字节!

    nvarchar2():没有bytechar之分,类似于varchar2(char),只不过nvarchar2()屏蔽了数据库编码,无论是何种编码,nvarchar2()中一个汉字都占两个字节。

    一般的教程,也就到这了,可是如果再多一步思考,会发现一个致命问题。

    实际应用中,很可能会出现这种写法:varchar2(1400char),我们主观的认为,这个字段最长不能超过1400个字符,这意味着我们可能会存入1399个字符,貌似很正确的样子。

    但是,如果这1399个字符都是汉字,字符长度并没有超过1400,看起来一切正常,但实际上我们损失了一部分数据,为什么?

    因为1399个汉字,按UTF8编码来说(99%的项目都是UTF8编码吧。。),需要占用1399*3=4197个字节,而文章开篇就说,无论是什么char,最大长度就是4000字节,一个也不能多,因此多出来的197个字节,都会抹去,而整个过程中,无任何错误提示,你的数据就这样蒸发了!

    所以,对于GBK编码的数据库而言,安全的写法为:varchar2(2000 char)nvarchar2(2000),对于UTF8编码的数据库而言,安全的写法为:varchar2(1333char)nvarchar2(2000)





    PL/SQL变量类型:

    接下来我们看看PL/SQL中VARCHAR2变量类型,如下官方文档所示,它的最大字节长度为32767,所能容纳的字符个数取决于字符集。

    Declaring Variables for Multibyte Characters

    The maximum size of a CHAR or VARCHAR2 variable is 32,767 bytes, whether you specify the maximum size in characters or bytes. The maximum number of characters in the variable depends on the character set type and sometimes on the characters themselves:

    Character Set Type

    Maximum Number of Characters

    Single-byte character set

    32,767

    n-byte fixed-width multibyte character set (for example, AL16UTF16)

    FLOOR(32,767/n)

    n-byte variable-width multibyte character set with character widths between 1 and n bytes (for example, JA16SJIS or AL32UTF8)

    Depends on characters themselves—can be anything from 32,767 (for a string containing only 1-byte characters) through FLOOR(32,767/n) (for a string containing only n-byte characters).

    When declaring a CHAR or VARCHAR2 variable, to ensure that it can always hold n characters in anymultibyte character set, declare its length in characters—that is, CHAR(n CHAR) or VARCHAR2(n CHAR), where n does not exceed FLOOR(32767/4) = 8191.

    可以通过下面一个PL/SQL代码来验证一下,如下所示,可以定义一个VARCHAR2类型的变量,给其赋值6000个字符串。

     
    DECLARE
        V_OUT VARCHAR2(32767);
    BEGIN
         V_OUT := RPAD('T', 6000, 'M');
         DBMS_OUTPUT.PUT_LINE(LENGTH(V_OUT));
    END;

    如果给VARCHAR2类型变量赋值超过23767,就会报PLS-00215: String length constraints must be in range (1 .. 32767)错误。

    DECLARE
        V_OUT VARCHAR2(32768);
    BEGIN
         V_OUT := RPAD('T', 5000, 'M');
         DBMS_OUTPUT.PUT_LINE(LENGTH(V_OUT));
    END;

    clip_image002

    展开全文
  • 文章目录1 结论2 演示 1 结论 1. Oracle 中 VARCHAR2 最大长度是 4000 个字节 2. PL/SQL 中 VARCHAR2 最大长度是 32767 个字节 2 演示 Oracle 测试: PL/SQL 测试:
  • MySQL中varchar最大长度是多少?

    万次阅读 多人点赞 2018-08-14 17:24:16
    目录 一. varchar存储规则: 二. varchar和char 的区别:  ps :被问到一个问题:MySQL中varchar最大长度是多少?...2、计算例子 3、varchar物理存储 4、InnoDB中的varchar 5、MyISAM中的varchar 一...
  • mysql varchar最大长度多少

    千次阅读 2018-06-08 13:14:44
    最近去面试问了一个问题,mysql一行有长度限制的,如果太你如何处理,所以回来查看了一下mysql一行最长不超过65535字节,如果采用gbk,一个中文2个字节,如果是utf-8,一个中文是3个字节。一般是utf-8,那么...
  • Oracle 字符串(varchar2) 长度限制详解

    千次阅读 2020-07-24 01:46:46
    对应该类型,在oracle中有三种比较常用的类型:varchar2(byte)、varchar2(char)、nvarchar2()。 那么这三种类型到底有什么区别呢? 首先,我们要时刻记清:无论是varchar2还是nvarchar2,最大字节数都是4000。 ...
  • 对于oracle数据库varchar2类型的字段设计的字段,存储中文时一个汉字占3个字符,而数字、字母、符号占1个字符。导致接口校验字段内容长度时不方便,因此编写自定义注解用于校验这类字段的内容长度。 ...
  • varchar2varchar的区别

    千次阅读 2019-06-14 17:14:31
    1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节; 2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理; 3.VARCHAR2字符要用几个字节...
  • Oracle varchar2最大支持长度

    千次阅读 2016-12-16 14:05:55
    Oracle varchar2最大支持长度 [日期:2012-03-06] 来源:Linux社区 作者:Linux [字体:大 中 小] 网上经常有人问Oracle varchar2最大支持长度为多少?其实这个叫法不太准确...
  • 实验说明varchar2和char最大长度

    千次阅读 2018-11-15 08:00:14
    实验说明varchar2和char最大长度
  • postgresql varchar 字母数字占用一个字符 中文占用3个字符 可以执行select char_length()函数测试
  • 1.当表的字段类型是varchar2时,无论是varchar2(4000 char)还是varchar2(4000 byte),最大都是4000字节。 2.当在plsql中的变量是varchar2时,最大是32767字节。 3.当func的参数类型是varchar2时,最大是...
  • MySQL中varchar最大长度是多少

    千次阅读 2019-05-29 09:43:05
    varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3个字 节,也就是说,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的数据可以使用可变的var...
  • 关于 varchar2 的最大长度 varchar2有两个最大长度:一个是在字段类型4000;一个是在PL/SQL中变量类型32767。今天犯了一个小错误,就是函数的varchar2类型的返回值长度也是4000,而不是我以为的32767。   想了...
  • MySQL5的文档,其中对varchar字段类型这样描述:varchar(m) 变字符串。M 表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,最大有效长度是65,532字节)。 为何会...
  • 先说结论,mysql 中的 varchar 是有最大长度限制的,这个值是 65535 个字节。varchar(100),这个 100 的单位是啥,这个单位其实在不同版本中是不一样的。在早...
  • oracle varchar2最大支持长度

    万次阅读 2012-03-03 11:10:58
    网上经常有人问oracle varchar2最大支持长度为多少?其实这个叫法不太准确,varchar2分别在oracle的sql和pl/sql中都有使用,oracle 在sql参考手册和pl/sql参考手册中指出:oracle sql varchar2的最大支持长度为4000...
  • 数据库中varchar类型 最大长度是多少?

    万次阅读 多人点赞 2019-10-09 20:57:00
    varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),...
  • mysql varchar字段类型最大长度

    千次阅读 2018-08-01 10:47:07
    mysql除TEXT or BLOBs字段类型,最大长度是65535字节 当采用UTF8编码时候,一个字符占4个字节,mysql varchar字段类型最大长度是16383字符
  • varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。 b)编码长度限制 字符类型若为gbk,每个字符最多占2个字节,最大...
  • [Mysql]varchar存中文的长度问题

    千次阅读 2020-12-16 11:45:53
    varchar(50)能存50个中文汉字,其实就是不管是什么字符,中文也好英文也好,只能存50个。 其实varchar类型可以存储多少个汉字,多少个数字,是要具体看我们的mysql版本,目前2020年使用的版本应该都是按照字符数来...
  • 关于 varchar2 的最大长度

    千次阅读 2012-03-03 11:07:53
    varchar2有两个最大长度:一个是在字段类型4000;一个是在PL/SQL中变量类型32767。今天犯了一个小错误,就是函数的varchar2类型的返回值长度也是4000,而不是我以为的32767。 想了一下,这是一个比较容易出错的...
  • MySql varchar 的最大长度

    千次阅读 2018-12-29 17:47:56
    MySql varchar 的最大长度 1. MySQL要求一个行的定义长度不能超过65535。... varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度 (长度超过255时需要2个字节) 2.1 utf...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,577
精华内容 5,430
关键字:

varchar2最长多长