精华内容
下载资源
问答
  • 1.首先理解varchar(n),n表示什么MySQL5.0.3之前varchar(n)这里的n表示字节数MySQL5.0.3之后varchar(n)这里的n表示字符数,比如varchar(200),不管是英文还是中文都可以存放200个n最大可以是多少2.MySQL行长度MySQL...

    1.首先理解varchar(n),n表示什么

    MySQL5.0.3之前varchar(n)这里的n表示字节数

    MySQL5.0.3之后varchar(n)这里的n表示字符数,比如varchar(200),不管是英文还是中文都可以存放200个

    n最大可以是多少

    2.MySQL行长度

    MySQL要求一个行定义长度不能超过65535个字节,不包括text、blob等大字段类型,varchar长度受此长度限制,和其他非大字段加起来不能超过65535个字节.

    3.varchar(n)占用几个字节

    varchar(n)占用几个字节跟字符集有关系:

    字符类型若为gbk,每个字符占用2个字节

    字符类型若为utf8,每个字符最多占用3个字节

    4.varchar最大长度可以是多少

    根据字符集,字符类型若为gbk,每个字符占用2个字节,最大长度不能超过32766,字符类型若为utf8,每个字符最多占用3个字节,最大长度不能超过21845,若超过这个限制,则会自动将varchar类型转为mediumtext或longtext

    展开全文
  • MySQL记录长度

    2016-01-28 15:27:00
    MySQL规定: 一条记录最长只能是...varchar的最大实现值是65533 + 2(varchar): 使用latin1: 一个字符 = 一个字节 NULL占用空间: 一个记录中如果有一个字段允许为空,那么NULL必须占用一个字节进行存储(个为空: 一个...

    MySQL规定: 一条记录最长只能是65535个字节: 所有字段的空间长度之和.

    使用不同的字符集验证:varchar的最大长度(GBK和UTF8)

    求出最大字符

    varchar的最大实现值是65533 + 2(varchar): 使用latin1: 一个字符 = 一个字节

    NULL占用空间: 一个记录中如果有一个字段允许为空,那么NULL必须占用一个字节进行存储(多个为空: 一个字节)

    text文本不占用记录长度: text字段本身占用10个字节

    转载于:https://www.cnblogs.com/chenjiacheng/p/6522331.html

    展开全文
  • Oracle 超长字段的处理

    千次阅读 2012-06-17 08:50:13
    LONG: 可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列  LONG RAW: 可变二进制数据,最长2G  CLOB: 字符大对象Clob 用来存储单字节的字符数据  NCLOB: 用来...

    ORACLE中的大对象:  

    LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列 

    LONG RAW: 可变长二进制数据,最长2G 

    CLOB:  字符大对象Clob 用来存储单字节的字符数据 

    NCLOB: 用来存储多字节的字符数据 

    BLOB: 用于存储二进制数据 

    BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内。bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复.    

    CLOB,NCLOB,BLOB都是内部的LOB(Large Object)类型,最长4G,没有LONG只能有一列的限制。

     

    要保存图片、文本文件、Word文件各自最好用哪种数据类型?

    --BLOB最好,LONG RAW也不错,但Long是oracle将要废弃的类型,因此建议用BLOB。

    对CLOB与BLOB对象的操作 

        1.  查询(GET) 

     

         查询CLOB     

        //获得数据库连接   

        Connection con = ConnectionFactory.getConnection();   

        con.setAutoCommit(false);   

        Statement st = con.createStatement();   

        //不需要“for update”   

        ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");   

        if (rs.next())   

        {   

            java.sql.Clob clob = rs.getClob("CLOBATTR");   

            Reader inStream = clob.getCharacterStream();   

            char[] c = new char[(int) clob.length()];   

            inStream.read(c);   

            //data是读出并需要返回的数据,类型是String   

            data = new String(c);   

            inStream.close();   

        }   

        inStream.close();   

        con.commit();   

        con.close(); 

     

        查询BLOB 

        Connection con = ConnectionFactory.getConnection();  

        con.setAutoCommit(false);   

        Statement st = con.createStatement();   

        //不需要“for update”   

        ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");   

        if (rs.next())   

        {   

            java.sql.Blob blob = rs.getBlob("BLOBATTR");   

            InputStream inStream = blob.getBinaryStream();   

            //data是读出并需要返回的数据,类型是byte[]   

            data = new byte[input.available()];   

            inStream.read(data);   

            inStream.close();   

        }   

        inStream.close();   

        con.commit();   

        con.close();   

     

        2.  插入(INSERT)

     

         插入CLOB

     

        //获得数据库连接   

        Connection con = ConnectionFactory.getConnection();   

        con.setAutoCommit(false);   

        Statement st = con.createStatement();   

        //插入一个空对象empty_clob()   

        st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");   

        //锁定数据行进行更新,注意“for update”语句   

        ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");   

        if (rs.next())   

        {   

            //得到java.sql.Clob对象后强制转换为oracle.sql.CLOB   

            oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");   

            Writer outStream = clob.getCharacterOutputStream();   

            //data是传入的字符串,定义:String data   

            char[] c = data.toCharArray();   

            outStream.write(c, 0, c.length);   

        }   

        outStream.flush();   

        outStream.close();   

        con.commit();   

        con.close();        

        插入BLOB  

        //获得数据库连接   

        Connection con = ConnectionFactory.getConnection();   

        con.setAutoCommit(false);   

        Statement st = con.createStatement();   

        //插入一个空对象empty_blob()   

        st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");   

        //锁定数据行进行更新,注意“for update”语句   

        ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");   

        if (rs.next())   

        {   

            //得到java.sql.Blob对象后强制转换为oracle.sql.BLOB   

            oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("BLOBATTR");   

            OutputStream outStream = blob.getBinaryOutputStream();   

            //data是传入的byte数组,定义:byte[] data   

            outStream.write(data, 0, data.length);   

        }   

        outStream.flush();   

        outStream.close();   

        con.commit();   

        con.close();  

     

    转自:http://www.blogjava.net/Simmons/articles/333302.html


    展开全文
  • Oracle 中LONG RAW BLOB CLOB类型介绍

    千次阅读 2015-08-31 09:45:05
    LONG: 可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列【不建议使用】 LONG RAW: 可变二进制数据,最长2G 【不建议使用】 CLOB: 字符大对象Clob 用来存储单字节的...

    说明:

    RAW: 未加工类型,可存储二进制数据或字节符
    LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列【不建议使用】
    LONG RAW: 可变长二进制数据,最长2G 【不建议使用】
    CLOB: 字符大对象Clob 用来存储单字节的字符数据;大型文本,例如XML数据。
    NCLOB: 用来存储多字节的字符数据
    BLOB: 用于存储二进制大对象数据;例如数码照片;
    BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内。
    bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复.
      
    CLOB,NCLOB,BLOB都是内部的LOB(Large Object)类型,最长4G,没有LONG只能有一列的限制

    注意: LONG 和 LONG RAW在Oracle新版已不推荐使用(使用BLOB替代),只是为了向后兼容而保留着。

    本文着重介绍:RAW/CLOB/BLOB

    1、RAW类型
    1.1 介绍
    You use the RAW datatype to store binary data or byte strings. For example, a RAW
    variable might store a sequence of graphics characters or a digitized picture. Raw data
    is like VARCHAR2 data, except that PL/SQL does not interpret raw data. Likewise,
    Oracle Net does no character set conversions when you transmit raw data from one
    system to another.
    The RAW datatype takes a required parameter that lets you specify a maximum size up
    to 32767 bytes. The syntax follows:
    RAW(maximum_size)
    You cannot use a symbolic constant or variable to specify the maximum size; you must
    use an integer literal in the range 1 .. 32767.
    You cannot insert RAW values longer than 2000 bytes into a RAW column. You can insert
    any RAW value into a LONG RAW database column because the maximum width of a
    LONG RAW column is 2147483648 bytes or two gigabytes. However, you cannot retrieve
    a value longer than 32767 bytes from a LONG RAW column into a RAW variable. Note
    that the LONG RAW datatype is supported only for backward compatibility; see “LONG
    and LONG RAW Datatypes” on page 3-5 for more information.

    RAW英语的意思为:生的;未加工的;
    你可以使用RAW类型存储二进制数据或字节符。例如,一个RAW变量可以存储一系列图形字符或一张数码照片。
    RAW数据就像VARCHAR2数据,除了一点:PL/SQL不会对其进行解释。同样的,当你在传输RAW数据时,Oracle Net不会对其进行字符集转换。

    RAW数据类型要求指定一个最大值到32767的参数;

    声明格式如下: RAW(maximum_size)
    你不能使用一个符号常量或变量来代替该参数而必须使用1..32767中的任一整数。

    你不能往RAW列中插入超过2000字节的字符;
    你可以往long raw列中插入任何raw数据,最大支持2G。然而,反过来则无法一次性取出超过32767字节的raw数据。

    此处需要注意,long raw是早起版本的类型;现在已不建议使用;详细见以下内容:

    1.2 相关工具
    –包
    utl_raw

    –函数
    utl_raw.cast_to_raw
    utl_raw.cast_to_number
    utl_raw.cast_to_varchar2
    hextoraw

    RAW保存的为16进制数。当使用HEXTORAW时,会把字符串中数据当作16进制数。
    而使用UTL_RAW.CAST_TO_RAW时,直接把字符串中每个字符的ASCII码存放到RAW类型的字段中。

    1.3 例子

    drop table test_raw;
    create table test_raw(msg   raw(2000));
    
    
    SCOTT@orcl> insert into test_raw values('<xml><name>Dylan</name><score>100</score></xml>');
    insert into test_raw values('<xml><name>Dylan</name><score>100</score></xml>')
                                *
    第 1 行出现错误:
    ORA-01465: 无效的十六进制数字
    
    --这个地方注意是十六进制
    SCOTT@orcl> insert into test_raw values(utl_raw.cast_to_raw('<xml><name>Dylan</name><score>100</score></xml>'));
    
    已创建 1 行。
    
    SCOTT@orcl> commit;
    
    --查看
    select msg from test_raw;
    MSG
    ------------------------------------------------------------------------------
    3C786D6C3E3C6E616D653E44796C616E3C2F6E616D653E3C73636F72653E3130303C2F73636F72
    653E3C2F786D6C3E
    
    0ABC
    
    SCOTT@orcl> select utl_raw.cast_to_varchar2(msg) from test_raw;
    
    UTL_RAW.CAST_TO_VARCHAR2(MSG)
    ------------------------------------------------------------------------------
    <xml><name>Dylan</name><score>100</score></xml>

    2、LONG和LONG RAW类型

    可以使用LONG类型存储变长字符串。Long类型就像VARCHAR2一样,除了LONG的最大容量为32760;

    使用LONG RAW类型存储二进制数据或字节字符串。LONG RAW数据就像LONG数据,除了LONG RAW数据不会被PL/SQL解释。
    LONG RAW的最大容量也为32760.

    你可以往LONG列中插入任何LONG数据,最大长度为2G。然而,PL/SQL中的LONG类型变量只能支持到32760。
    这条规则同样适用于LONG RAW类型。

    表中的LONG列可以存储文本,字符数组,甚至短文档。可以针对该类型列做UPDATE, INSERT, 和SELECT 操作。
    但是无法再表达式,SQL函数调用或特定的SQL条件语句例如WHERE, GROUP BY和CONNECT BY。

    In SQL statements, PL/SQL binds LONG values as VARCHAR2, not as LONG. However,
    if the length of the bound VARCHAR2 exceeds the maximum width of a VARCHAR2
    column (4000 bytes), Oracle converts the bind type to LONG automatically, then issues
    an error message because you cannot pass LONG values to a SQL function

    SQL语句中, PL/SQL将LONG类型作为VARCHAR2类型绑定。然而,如果所绑定的VARCHAR2长度超出了4000,ORACLE会自动转换到LONG,
    然后抛出一个错误因为你不能将LONG值传递给SQL函数。

    --例如:
    SCOTT@orcl> create table long_test(id number, msg long);
    
    表已创建。
    
    SCOTT@orcl> insert into long_test values(1,'hello world');
    
    已创建 1 行。
    
    SCOTT@orcl> commit;
    
    提交完成。
    
    SCOTT@orcl> select * from long_test where msg='123';
    select * from long_test where msg='123'
                                  *
    第 1 行出现错误:
    ORA-00997: 非法使用 LONG 数据类型
    
    
    SCOTT@orcl> /
    
            ID MSG
    ---------- --------------------------------------------------------------------------------
             1 hello world
    
    SCOTT@orcl> select id, trim(msg) from long_test where id = 1;
    select id, trim(msg) from long_test where id = 1
                    *
    第 1 行出现错误:
    ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 LONG

    3、CLOB
    可以使用CLOB类型大块的字符数据。每一个CLOB变量存储一个定位器,指向一个大块字符数据。

    CLOBs participate fully in transactions, are recoverable, and can be replicated. Changes
    made by package DBMS_LOB can be committed or rolled back. CLOB locators can span
    transactions (for reads only), but they cannot span sessions.

    CLOB参与整体事务,可恢复,并且可以重复。
    由DBMS_LOB包改变的数据可以提交和回滚。CLOB定位器可以跨事务,但不能跨会话。

    4、BLOB
    You use the BLOB datatype to store large binary objects in the database, in-line or
    out-of-line. Every BLOB variable stores a locator, which points to a large binary object.
    BLOBs participate fully in transactions, are recoverable, and can be replicated. Changes
    made by package DBMS_LOB can be committed or rolled back. BLOB locators can span
    transactions (for reads only), but they cannot span sessions.

    用于存储大二进制对象,BLOB参与整体事务,可恢复,并且可以重复。
    由DBMS_LOB包改变的数据可以提交和回滚。BLOB定位器可以跨事务,但不能跨会话。

    drop table blob_test;
    
    SCOTT@orcl>  create table blob_test(   id number primary key,   content blob not null);
    
    表已创建。
    
    SCOTT@orcl> insert into blob_test values(1,'11111000011111');
    
    已创建 1 行。
    
    SCOTT@orcl> commit;
    
    提交完成。
    
    SCOTT@orcl> select * from blob_test;
    
    SCOTT@orcl> set linesize 2000
    SCOTT@orcl> /
    
            ID CONTENT
    ---------- -----------------------------------
             1 11111000011111
    
    
    SCOTT@orcl> insert into blob_test values(1,'11111000011111>');
    insert into blob_test values(1,'11111000011111>')
                                                 *
    第 1 行出现错误:
    ORA-01465: 无效的十六进制数字
    
    
     SCOTT@orcl> update blob_test set content=to_blob('110010000110011') where id=1;
    
    已更新 1 行。
    
    SCOTT@orcl> rollback
      2  ;
    
    回退已完成。
    
    SCOTT@orcl> select * from blob_test;
    
            ID CONTENT
    ---------- ---------------------------------------------------------------------
             1 11111000011111
    
     delete from blob_test where id=1; 
     commit;
    展开全文
  • LONG:可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列 二进制类: LONG RAW: 可变二进制数据,最长2G 大对象类: CLOB:用来存储单字节的字符数据 NCLOB:用来...
  • oracle数据类型

    2019-10-06 02:41:54
    字符型char 固定字符,最长2000个--char默认值是char(1)varchar2 可变字符,最长4000个,最小值是1--VARCHAR2 数据类型必须要指定 size nchar/nvarchar2 NCHAR/NVARCHAR2类型的列使用国家字符集raw和long raw ...
  • mysql 第二章 建库建表规范一....字符串char(100) 定长字符串类型,不管字符串长度多长,都立即分配100个字符长度的存储空间,未占满的空间使用"空格"填充 注:char 最长255varchar(100) 变长字符串类...
  • mysql 第二章 建库建表规范一....字符串char(100) 定长字符串类型,不管字符串长度多长,都立即分配100个字符长度的存储空间,未占满的空间使用"空格"填充 注:char 最长255varchar(100) 变长字符串类...
  • Oracle数据类型介绍:(字符型、数值型、日期型、其它类型)char(n<2000),Nchar(n<1000),n代表的是存储的长度,char类型长度最长2000,Nchar最大长度为1000,设置之后固定长度的类型设置的长度为...varchar2(...
  • mysql的一些基础知识

    2018-02-09 16:46:28
    (2) mysql varchar字段最长可存储的字节数为65535,实际为65532, utf8的每一个字节占用8位,但是实际存储的长度为63352/3-1=21842。(3) 与oracle的对比,Mysql: 单进程,线程;Oracle: ...
  • 开发中所遇到的问题

    2018-06-15 14:34:01
    数据库方面类型混乱的问题字段的类型有时候看起来确实混乱,比如什么时候用integer,什么时候用number,这绝对不是随意的,至于number究竟有多长最长可以指定多长?integer和C++中32位的int类型有什么异同吗?而...
  • BLOB和CLOB区别和定义

    2014-11-10 16:24:36
    BLOB和CLOB区别和定义 LONG: 可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列 LONG RAW: 可变二进制数据,最长2G CLOB: 字符大对象Clob 用来存储单字节的字符数据...
  • Clob和Blob的区别

    千次阅读 2013-01-25 21:01:25
    LONG:可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列  LONG RAW: 可变二进制数据,最长2G  CLOB: 字符大对象Clob 用来存储单字节的字符数据  ...
  • LONG: 可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性 LONG RAW: 可变二进制数据,最长2G CLOB: 用来存储单字节的字符数据 NCLOB: 用来存储字节的字符数据 BLOB: 用于存储二进制数据 BFILE: 存储
  • 字符串char(100)定长字符串类型,不管字符串长度多长,都立即分配100个字符长度的存储空间,未占满的空间使用"空格"填充注:char 最长255varchar(100)变长字符串类型,每次存储数据之前,都要先判断一下长度,按需分配此盘...
  •  LONG: 可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列  LONG RAW: 可变二进制数据,最长2G  CLOB: 字符大对象Clob 用来存储单字节的字符数据  NCLOB: ...
  • LONG:可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列 LONG RAW:可变二进制数据,最长2G CLOB: 字符大对象Clob 用来存储单字节的字符数据 NCLOB:用来存储字节...
  • Oracle中的BLOB和CLOB

    2015-12-30 17:36:54
     LONG: 可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列  LONG RAW: 可变二进制数据,最长2G  CLOB: 字符大对象Clob 用来存储单字节的字符数据  NCLOB:...
  • oracle CLOB和BLOB

    2011-06-25 21:18:24
    LONG: 可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列  LONG RAW: 可变二进制数据,最长2G  CLOB: 字符大对象Clob 用来存储单字节的字符数据  NCLOB: 用来...
  •  LONG: 可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列  LONG RAW: 可变二进制数据,最长2G  CLOB: 字符大对象Clob 用来存储单字节的字符数据  NCLOB: ...
  • LONG: 可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列 LONG RAW: 可变二进制数据,最长2G CLOB: 字符大对象Clob 用来存储单字节的字符数据 NCLOB: 用来存储...
  •  LONG: 可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列  LONG RAW: 可变二进制数据,最长2G  CLOB: 字符大对象Clob 用来存储单字节的字符数据  NCLOB: ...
  • ORACLE中的大对象: LONG: 可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列 LONG RAW: 可变二进制数据,最长2G CLOB: 字符大对象Clob 用来存储单字节的字符数据 ...
  • LONG: 可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列  LONG RAW: 可变二进制数据,最长2G  CLOB: 字符大对象Clob 用来存储单字节的字符数据  NCLOB: 用来...
  • LONG: 可变的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储文本一个表中最多一个LONG列 LONG RAW: 可变二进制数据,最长2G CLOB: 字符大对象Clob 用来存储单字节的字符数据 NCLOB: 用来存储...

空空如也

空空如也

1 2 3
收藏数 60
精华内容 24
关键字:

varchar2最长多长