精华内容
下载资源
问答
  • Oracle varchar2 最大长度问题详解

    千次阅读 2020-04-15 07:51:43
    文章目录1 结论2 演示 1 结论 1. Oracle 中 VARCHAR2 最大长度是 4000 个字节 2. PL/SQL 中 VARCHAR2 最大长度是 32767 个字节 2 演示 Oracle 测试: PL/SQL 测试:

    文章目录

    1 结论

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

    2 演示

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

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

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

    展开全文
  • dbms_lob.write( lob_loc in out nocopy clob character set any_cs, amount in binary_integer, offset in integer, buffer in varchar2 character set lob_loc%charset); 其中各个参数的含义如下: lob_loc是要...

    dbms_lob包学习笔记之二:append和write存储过程

    发表人:www.wwf.co | 发表时间: 2005年四月27日, 14:30

    两个写数据的存储过程

    dbms_lob.append 和 dbms_lob.write

    append存储过程用于将一个大对象添加到另一个大对象中,此时是将源大对象的内容全部添加过去。append存储过程的语法如下:

    dbms_lob.append(

    dest_lob in out nocopy blob,

    src_lob in  blob);

    dbms_lob.append(

    dest_lob in out nocopy clob character set any_cs,

    src_lob in clob character set dest_lob%charset);

    其中,各个参数的含义如下:

    dest_lob是被源lob添加到的目标lob的定位器

    src_lob是源lob的定位器

    any_cs用来指定字符集。

    write存储过程

    write存储过程能够将数据写入大型对象中。写的位置是从大型对象开始处的某个绝对偏移地址,数据从缓冲区参数被写入。写操作将覆盖已经在大型对象偏移地址处存在的任何长度为指定的数据。如果输入数多于在缓冲区的数据,将产生一个错误。如果输入数量小于在缓冲区的数据,那么只有缓冲区的数据字节活字符被写给大型对象。

    write存储过程的语法如下:

    dbms_lob.write(

    lob_loc in out nocopy blob,

    amount in binary_integer,

    offset in integer,

    buffer in raw);

    dbms_lob.write(

    lob_loc in out nocopy clob character set any_cs,

    amount in binary_integer,

    offset in integer,

    buffer in varchar2 character set lob_loc%charset);

    其中各个参数的含义如下:

    lob_loc是要操作的大型对象定位器。

    amount是要写道大型对象中去的字节数量。

    offset是指定将数据写入到大型对象什么位置的偏移地址。

    buffer是写入到大型对象的数据缓冲区。

    any_cs指定要使用的字符集。

    示例:

    declare

    source_lob clob;

    dest_lob clob;

    write_amount integer:=18;

    writing_position integer;

    buffer varchar2(20) := 'Added text to clob';

    begin

    select clob_locator into dest_lob from mylobs where lob_index = 4 for update;

    select clob_locator into source_lob from mylobs where lob_index = 1;

    dbms_lob.append(dest_lob, source_lob);

    commit;

    select clob_locator into dest_lob from mylobs where lob_index = 5 for update;

    writing_position := dbms_lob.getlength(dest_lob) + 1;

    dbms_lob.write(dest_lob, write_amount, writing_position, buffer);

    commit;

    end;

    /

    SQL> select * from mylobs;

    LOB_INDEX---CLOB_LOCATOR-------------------------------------------------------

    1      I Love Oracle 9i

    2      Oracle 9i is powerful

    3      Oracle 9i is the most popular database in the world

    4      I Love Oracle 9iI Love Oracle 9i

    5      Oracle 9i is powerfulAdded text to clob

    展开全文
  • varchar2最大存储长度是4000。如以下语句:12createtabletest(idvarchar2(4001));执行时会报错。如果将语句改为如下,则会执行成功。12createtabletest(idvarchar2(4000));关于oracle中的字符类型char、varchar、...

    varchar2的最大存储长度是4000。

    如以下语句:12create table test(id varchar2(4001));

    执行时会报错。

    b53434e7b46306dc97b09fa930216d99.png

    如果将语句改为如下,则会执行成功。12create table test(id varchar2(4000));

    关于oracle中的字符类型char、varchar、varchar2 的区别

    区别:1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。 2.CHAR的效率比VARCHAR2的效率稍高。 3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。

    展开全文
  • url:... 2014-07-09 15:53 by 潇湘隐者, 作者:潇湘隐者 ... 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. ...VARCHAR2数据类型的最
  • 今天群里有人问varchar 不是最大应该只可以设置65532(第一个字节+两个长度字节)吗 ,但是为什么可以设置成65533
  • 关于 varchar2最大长度varchar2有两个最大长度:一个是在字段类型4000;一个是在PL/SQL中变量类型32767。今天犯了一个小错误,就是函数的varchar2类型的返回值长度也是4000,而不是我以为的32767。想了一下,这是...
  • PLSQL的varchar2最大长度为32767就是32K,这也是本地动态sql语句能够处理的最大长度.如果动态sql语句过长,就没有办法在一个varchar2变量中存储整个语句,导致execute immediate本地动态sql方式无法使用。但现实中...
  • ORACLE VARCHAR2最大长度问题 url:http://www.cnblogs.com/kerrycode/p/3833746.html 2014-07-09 15:53 by 潇湘隐者, VARCHAR2数据类型的最大长度问题,是一个让人迷惑的问题,因为VARCHAR2既分PL/SQL Data ...
  • 1.当表的字段类型是varchar2时,无论是varchar2(4000 char)还是varchar2(4000 byte),最大长都是4000字节。 2.当在plsql中的变量是varchar2时,最大长是32767字节。 3.当func的参数类型是varchar2时,最大长是...
  • VARCHAR2最大长度是32767还是4000

    千次阅读 2018-02-07 00:50:33
    VARCHAR2最大长度是32767还是4000?截止目前的答案应该是这样的:1.Oracle12c之前的版本,表字段类型最大长度是4000个字节;(Oracle12c通过设置初始化参数MAX_SQL_STRING_SIZE为EXTENDED可以支持到32767个字节)2....
  • varchar和char 的区别:ps :被问到一个问题:MySQL中varchar最大长度是多少?1、限制规则2、计算例子3、varchar物理存储4、InnoDB中的varchar5、MyISAM中的varchar一. varchar存储规则:4.0版本以下,varchar(20),...
  • oracle varchar2字段长度不够问题

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

    千次阅读 2018-12-29 17:47:56
    MySql varchar最大长度 1. MySQL要求一个行的定义长度不能超过65535。 注意这里是一行,所有字段的长度加起来不能超过这么多 所谓单行最大限制指的就是一张表中所有字段的所设置的长度不得超过65535字节, 2. ...
  • 实验说明varchar2和char最大长度

    千次阅读 2018-11-15 08:00:14
    实验说明varchar2和char最大长度
  • 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 '...
  • 来自公众号:谭小谭先说结论,mysql 中的 varchar 是有最大长度限制的,这个值是 65535 个字节。varchar(100),这个 100 的单位是啥,这个单位其实在不同版本中是不一样的。在早期低版本中代表的是字节,具体哪个...
  • 如果某一项中设置的是varchar(50) mysql varchar(50) 不管中文 还是英文 都是存50个的   转载:https://blog.csdn.net/zhengshg/article/details/64918884 varchar(n),n表示什么? MySQL5.0.3之前varchar...
  • show parameter MAX_STRING_SIZE standard:代表12c之前的长度限制,即varchar2和nvarchar2 4是4000 ... extended:代表12c 32k strings新特性,varchar2、nvarchar2、raw最大长度是32767,即32kb 由数据库参...
  • Oracle 字符串(varchar2) 长度限制详解

    千次阅读 2020-07-24 01:46:46
    oracle数据库相信大家都比较熟悉,数据库中有一种非常常用的数据类型:字符串... 首先,我们要时刻记清:无论是varchar2还是nvarchar2最大字节数都是4000。 varchar2(byte):就是默认的表示方式,比如我们写成:v...
  • 项目中对所有的实体都用 Spring 的 @Validated 进行了校验,集成测试的时候却总是出现...记得开发的时候测试过入参校验,一度怀疑自己失忆了,认为是 @Validated 校验失效了,最终发现根源竟然在“中文”存储长度上。
  • MySQL中varchar字段最大长度是多少

    千次阅读 2020-12-31 10:55:40
    微信搜索『coder-home』,或者扫一扫右侧的二维码,关注『程序猿集锦』。了解更多干货分享,还有各类视频教程。...它的最大长度是多少?为什么有时候定义一个varchar(10)的字段可以存储10个汉字,但是不能存...
  • Oracle varchar2最大支持长度 [日期:2012-03-06] 来源:Linux社区 作者:Linux [字体:大 中 小] 网上经常有人问Oracle varchar2最大支持长度为多少?其实这个叫法不太准确...
  • 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 2 3 4 5 ... 20
收藏数 95,981
精华内容 38,392
关键字:

varchar2最大长度

友情链接: tools.rar