精华内容
下载资源
问答
  • 文章目录1 结论2 演示 1 结论 1. OracleVARCHAR2 最大长度是 4000 个字节 2. PL/SQL 中 VARCHAR2 最大长度是 32767 个字节 2 演示 Oracle 测试: PL/SQL 测试:

    文章目录

    1 结论

    1. Oracle 中 VARCHAR2 最大长度是 4000 个字节
    2. PL/SQL 中 VARCHAR2 最大长度是 32767 个字节
    

    2 演示

    Oracle 测试:
    在这里插入图片描述

    PL/SQL 测试:
    在这里插入图片描述

    展开全文
  • 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; 
     
    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.

    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

    展开全文
  • ORACLE VARCHAR2最大长度问题 url:http://www.cnblogs.com/kerrycode/p/3833746.html 2014-07-09 15:53 by 潇湘隐者, VARCHAR2数据类型的最大长度问题,是一个让人迷惑的问题,因为VARCHAR2既分PL/SQL Data ...
    

    ORACLE VARCHAR2最大长度问题

    url:http://www.cnblogs.com/kerrycode/p/3833746.html

    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.

    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

    作者: 潇湘隐者

    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
    展开全文
  • ORACLE VARCHAR2最大长度问题 http://www.cnblogs.com/kerrycode/p/3833746.html OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别] http://www.cnblogs.com/lteal/p/5680430.html ORA-01461: 仅能...

    ORACLE VARCHAR2最大长度问题    http://www.cnblogs.com/kerrycode/p/3833746.html

    ORACLE中一个字符占多少字节   http://www.cnblogs.com/liang--liang/archive/2012/09/17/2689725.html

    OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]   http://www.cnblogs.com/lteal/p/5680430.html

    ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值  http://libinchinabj.iteye.com/blog/1711747

    ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值  http://www.cnblogs.com/xiaotiannet/p/3846444.html

    ORACLE中一个字符占多少字节    http://www.cnblogs.com/liang--liang/archive/2012/09/17/2689725.html
    展开全文
  • url:... 2014-07-09 15:53 by 潇湘隐者, 作者:潇湘隐者 ... 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. ...VARCHAR2数据类型的最
  • Oracle varchar2最大支持长度

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

    万次阅读 2012-03-03 11:10:58
    网上经常有人问oracle varchar2最大支持长度为多少?其实这个叫法不太准确,varchar2分别在oracle的sql和pl/sql中都有使用,oracle 在sql参考手册和pl/sql参考手册中指出:oracle sql varchar2的最大支持长度为4000...
  • PLSQL的varchar2最大长度为32767就是32K,这也是本地动态sql语句能够处理的最大长度.如果动态sql语句过长,就没有办法在一个varchar2变量中存储整个语句,导致execute immediate本地动态sql方式无法使用。但现实中...
  • Mysql,Oracle varchar2 字节长度

    千次阅读 2018-06-27 14:18:09
    转载:https://www.cnblogs.com/kxdblog/p/4042331.html1.错误提示: mysql的Data truncation: ...字段过长而导致出错的, 2. 可能是因为数据库里的表设置的字符集不相同。解决办法:varchar(10) ——>var...
  • oracle varchar2字段长度不够问题

    千次阅读 2020-07-17 10:49:39
    3.调整oracle字段,改至varchar2(500),保存成功 今天用户反馈bug,数据无法保存。于是把数据拉到本地代码测试跑一遍。可以保存成功。 跑到linux上tail -f,由于有3台节点,只能一台台看,总算拉到日志。 1.报...
  • Oracle Varchar2 存储长度问题

    千次阅读 2018-02-14 11:02:43
    原文地址:https://www.cnblogs.com/yangxia-test/archive/2013/08/07/3242775.htmlvarchar2最大是4000字节,那么就看你的oracle字符集:(select userenv('language') from dual;)如果字符集是16位编码的,ZHS16...
  • 1.当表的字段类型是varchar2时,无论是varchar2(4000 char)还是varchar2(4000 byte),最大长都是4000字节。 2.当在plsql中的变量是varchar2时,最大长是32767字节。 3.当func的参数类型是varchar2时,最大长是...
  • varchar2最大存储长度是4000。如以下语句:12createtabletest(idvarchar2(4001));执行时会报错。如果将语句改为如下,则会执行成功。12createtabletest(idvarchar2(4000));关于oracle中的字符类型char、varchar、...
  • ORACLE varchar2 长度问题整体

    千次阅读 2013-11-12 12:38:35
    oracle中,数据库表的varchar2类型和pl/sql中varchar2类型长度是不等的。 varchar2类型的表的列最大长度:4000字节 而 pl/sql中varchar2类型的变量最大长度:32767   网络上关于varchar2类型问题整理: 问题: ...
  • 突然在写程序的时候发现了个小问题,环境为Oracle10g,工具PL\SQL DEVELOPER7.1.5 ,写一个存储过程例如:有一个变量 V_I IN VARCHAR2(4000);下面我求出传入的字符串的长度CREATE OR REPLACE PROCEDURE TEST_LENGTH(V_...
  • 关于 varchar2 的最大长度 varchar2有两个最大长度:一个是在字段类型4000;一个是在PL/SQL中变量类型32767。今天犯了一个小错误,就是函数的varchar2类型的返回值长度也是4000,而不是我以为的32767。   想了...
  • varchar2最大长度是4000字节。 我们必须根据使用中的oracle字符集,来判断可存入的字符数。 16位编码:每个字符编码占用16位,即2个字节,最多可存入2000个字符。 32位编码:最多可存入 1000个字符。
  • oracle中char、varchar、...,对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。 2.CHAR的...
  • 今天去了一家公司面试,一...回来后查了资料后才知道Oracle中的VARCHAR2字段类型,最大值为4000,SQL参考手册中也明确指出VARCHAR2最大大小为4000,注意此处的最大长度是指字节长度,而不是指字符个数。最多可以...
  • 我在SQL Developer中直接执行这个存储过程 testp('12345') 系统显示长度是5,而 我使用OLEDB.Oracle驱动,使用C#程序执行这个存储过程时,发现同样的调用记录却显示长度为6. 我的系统是Windows 2008, 数据库...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,733
精华内容 21,493
关键字:

oraclevarchar2最大长度