CLOB和BLOB的区别

CLOB 定义
  数据库中的一种保存文件所使用的类型。
  Character Large Object
  SQL 类型 CLOB 在 JavaTM 编程语言中的映射关系。SQL CLOB 是内置类型,它将字符大对象 (Character Large Object) 存储为数据库表某一行中的一个列值。默认情况下,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQL CLOB 数据的逻辑指针而不是数据本身。Clob 对象在它被创建的事务处理期间有效。
  在一些数据库系统里,也使用Text 作为CLOB的别名,比如SQL Server
BLOB的含义
  BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。
  在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。
  BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。
  根据Eric Raymond的说法,处理BLOB的主要思想就是让文件处理器(如数据库管理器)不去理会文件是什么,而是关心如何去处理它。
但也有专家强调,这种处理大数据对象的方法是把双刃剑,它有可能引发一些问题,如存储的二进制文件过大,会使数据库的性能下降。在数据库中存放体积较大的多媒体对象就是应用程序处理BLOB的典型例子。
CLOB和BLOB的区别
  CLOB使用CHAR来保存数据。 如:保存XML文档。
       BLOB就是使用二进制保存数据。 如:保存位图。
JAVA里面对CLOB的操作
  在绝大多数情况下,使用2种方法使用CLOB
  1 相对比较小的,可以用String进行直接操作,把CLOB看成字符串类型即可
  2 如果比较大,可以用 getAsciiStream 或者 getUnicodeStream 以及对应的 setAsciiStream 和 setUnicodeStream 即可
  读取数据
  ResultSet rs = stmt.executeQuery("SELECT TOP 1 * FROM Test1");
  rs.next();
  Reader reader = rs.getCharacterStream(2);
  插入数据
  PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1 (c1_id, c2_vcmax) VALUES (?, ?)");
  pstmt.setInt(1, 1);
  pstmt.setString(2, htmlStr);
  pstmt.executeUpdate();
  更新数据
  Statement stmt = con.createStatemet();
  ResultSet rs = stmt.executeQuery("SELECT * FROM test1");
  rs.next();
  Clob clob = rs.getClob(2);
  long pos = clob.position("dog", 1);
  clob.setString(1, "cat", len, 3);
  rs.updateClob(2, clob);
  rs.updateRow();
 
 
BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的。其实两个是可以互换的的,或者可以直接用LOB字段代替这两个。但是为了更好的管理ORACLE数据库,通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便。
 
 

转载于:https://www.cnblogs.com/lhang55/p/9243858.html

### CLOBBLOB 数据类型的差异 在数据库中,**CLOB(Character Large Object)** **BLOB(Binary Large Object)** 是两种用于存储大量数据的数据类型,但它们的设计用途、存储内容处理方式存在显著差异。 - **数据类型与用途** CLOB 主要用于存储**字符数据**,如文本文档、XML 文件、日志文件等。而 BLOB 则专门用于存储**二进制数据**,例如图像、音频、视频、可执行文件等[^1]。 - **字符集支持** CLOB 支持字符集的概念,可以使用数据库的默认字符集或指定特定的字符集进行编码解码。而 BLOB 不涉及字符集,它以原始字节形式存储数据,适用于所有不需要字符解释的场景。 - **操作方式** 对于 CLOB 的操作通常基于字符流(Character Stream),适合文本内容的读写;而 BLOB 的操作基于字节流(Byte Stream),更适合处理非结构化或二进制格式的数据。 - **最大容量限制** 在 Oracle 数据库中,CLOB BLOB 的最大存储容量取决于具体的数据库配置版本。一般来说,CLOB 可以存储高达 **4GB** 的文本数据,而 BLOB 同样也支持类似大小的二进制数据[^1]。 - **SQL 映射与编程语言支持** 在 Java 编程语言中,SQL 类型 CLOB 被映射为 `java.sql.Clob` 接口,该接口通过一个逻辑指针引用实际的 CLOB 数据,而不是直接包含数据本身。类似地,BLOB 被映射为 `java.sql.Blob` 接口,用于处理二进制大对象。由于不同的访问方式(如 JDBC 或 JNDI 连接池)提供的实现类可能不同,在入库操作时需要注意兼容性问题[^3]。 - **查询与性能** 查询 CLOB BLOB 字段时,由于其数据量较大,通常不会一次性加载整个字段内容,而是采用分块读取的方式。此外,频繁操作 CLOB/BLOB 字段可能会影响数据库性能,因此在设计表结构时应权衡是否将这些大对象存储在数据库中,还是选择将其路径保存在数据库中而数据存放在文件系统中[^1]。 ### 示例:Java 中对 CLOB BLOB 的基本操作 ```java // 插入 CLOB 数据示例 PreparedStatement pstmt = connection.prepareStatement("INSERT INTO documents (id, content) VALUES (?, ?)"); pstmt.setInt(1, 1); pstmt.setCharacterStream(2, new FileReader("large_text_file.txt"), fileLength); pstmt.executeUpdate(); // 插入 BLOB 数据示例 PreparedStatement pstmtBlob = connection.prepareStatement("INSERT INTO media (id, data) VALUES (?, ?)"); pstmtBlob.setInt(1, 101); pstmtBlob.setBinaryStream(2, new FileInputStream("image.jpg"), imageSizeInBytes); pstmtBlob.executeUpdate(); ``` ### 总结 | 特性 | CLOB | BLOB | |------------------|-----------------------------------|------------------------------------| | 存储内容 | 大量字符数据 | 大量二进制数据 | | 字符集支持 | 是 | 否 | | 操作方式 | 字符流 | 字节流 | | SQL 映射 | `java.sql.Clob` | `java.sql.Blob` | | 最大容量 | 依赖数据库配置(通常可达数 GB) | 同上 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值