oracle nvarchar2和varchar2 NCLOB、BLOB、CLOB区别

文章目录

  • 位(bit)、字节(byte)、字符、编码之间的关系
  • char、varchar、 varchar2、nvarchar2
  • 区别
  • nvarchar2和varchar2
  • NCLOB、BLOB、CLOB
  • Java中读到的NCLOB对象转化成String对象工具类

位(bit)、字节(byte)、字符、编码之间的关系

1、位:是数据存储的最小单位,每个二进制数字0或者1就是一个位;
2、字节:一个字节占8位,即1byte(字节)=8bit(位);
3、字符:一般GBK编码下,汉字占2个字节;在utf-8编码下,汉字占3个字节;
4、编码:规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫编码,即每个字符用二进制在计算中表示存储;

char、varchar、 varchar2、nvarchar2

(mysql中没有varchar2和nvarchar2)

区别

1、char是固定长度,长度不够的情况下,用空格代替;
2、varchar、varchar2、nvarchar2是可变长度,按照实际的长度存储,定义长度为10,不满10个字节的话,以实际长度为准;
3、char、varchar、varchar2默认存储单位是字节(也可以用字符作为存储单位),nvarchar2默认存储单位只能是字符;
4、 VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些;

nvarchar2和varchar2

1、nvarchar2最大值为2000,单位是字符,并且不受字符集编码影响,最大能存2000个字符(无论汉字/字母),每个字符的长度都为2个字节;
2、varchar2最大值为4000,类型可以是char也可以是byte,默认为字节byte;当gbk编码时,一个汉字占2个字节,所以varchar能存2000个汉字;uft-8编码时,只能存1333个汉字。

NCLOB、BLOB、CLOB

共同点
1、以上三者都是oracle数据库中的大对象数据类型,oracle提供专门的包对其进行操作;
2、三者都属于大型对象(LOB),用来保存较大的图形文件/文本文件/音频/视频等,最大长度为4GB;
不同点
1、CLOB(内部字符大对象)使用Char来保存数据;(如:保存XML文档)
2、BLOB(内部二进制大对象)使用二进制来保存数据;(如:保存位图)
3、BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的。其实两个是可以互换的的,或者可以直接用LOB字段代替这两个。但是为了更好的管理ORACLE数据库,通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便。
4、 NCLOB(内部定长多字节字符大对象)它存储UNICODE类型的数据,支持固定宽度和可变宽度的字符集,NCLOB对象可以存储最多(4 gigabytes-1) * (database block size)大小的文本数据。

Java中读到的NCLOB对象转化成String对象工具类

   public String clob2Str(NClob nclob) throws Exception {
        String content = "";
        try {
            Reader is = nclob.getCharacterStream();
            BufferedReader buff = new BufferedReader(is);// 得到流
            String line = buff.readLine();
            StringBuffer sb = new StringBuffer();
            while (line != null) {// 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING
                sb.append(line);
                line = buff.readLine();
            }
            content = sb.toString();
        } catch (Exception e) {
            logger.error("java.sql.NClob类型转java.lang.String类型出错..." + e.getCause());
            e.printStackTrace();
        }
        return content;
    }

原文链接:https://blog.csdn.net/z19950712/article/details/121612259

你可能感兴趣的:(Mysql数据库,oracle,数据库,java)