1.简介
CLOB(Character Large Object) 是指用于存储大型文本数据的数据类型。与之对应的另一个数据类型是 BLOB,指的是二进制大型对象。CLOB 类型在实际应用中非常广泛,尤其是在存储长篇文字、图书、电子邮件以及其他类似数据时,能够提供很大的便利性。
1.1.内容类型
类型 | 描述 |
---|---|
文本文档 | CLOB字段可以存储大型的文本文档,如书籍、说明文档、报告等。这些文本文档通常包含不同的段落、标题、标签、索引等,可以通过CLOB字段进行保存和检索 |
XML文档 | XML是一种用于表示结构化数据的标记语言,CLOB字段可以存储包含大量XML标签的文档。XML文档经常使用CLOB字段存储在数据库中,以便进行XML解析、查询和更新操作 |
JSON数据 | JSON是一种轻量级的数据交换格式,CLOB字段可以用于存储大量的JSON数据。JSON数据经常用于Web应用程序之间的数据交换,通过CLOB字段可以方便地存储和处理这些数据 |
日志文件 | CLOB字段也可用于存储大型的日志文件,如应用程序的运行日志、系统日志、错误日志等。日志文件通常包含大量的文本信息,通过CLOB字段可以有效地保存这些信息并支持快速的查询和分析 |
HTML文档 | CLOB字段还可用于存储一些富文本内容,比如HTML文档。HTML文档可以包含各种标签和样式,以实现更丰富的文本格式和布局。通过CLOB字段,可以将HTML文档存储在数据库中,并在需要时进行检索和呈现 |
长文本字段 | 除以上内容类型外,CLOB字段还可用于存储长度超过数据库普通字段长度(如VARCHAR2)限制的长文本。一些应用场景中,可能需要存储一些包含大量字符的文本内容,例如用户的评论、文章内容等,CLOB字段可以满足这种需求 |
1.2.存储
- 在
Oracle
数据库中,可以使用 CLOB 数据类型存储最多4 GB
的文本。而在其他数据库中,CLOB 的容量限制可能会有所不同。 - MySQL 中,可以使用
MEDIUMTEXT
和LONGTEXT
数据类型来存储 CLOB 类型的数据,其中MEDIUMTEXT
最多可存储16 MB
的数据,而LONGTEXT
最多可存储4 GB
的数据。 - 于其他数据类型,如 VARCHAR 或 TEXT,CLOB 存储需要更多的空间和资源。CLOB 数据类型需要更大的物理空间,在硬盘和内存方面都需要更多的资源,因此在进行数据存储和读取时可能会略有延迟。但是,相较于其他的数据类型,
CLOB 类型能够提供更大的存储空间,并支持更高的性能和扩展性
。
1.3.优缺点
- 优点:
更好的存储能力
:CLOB 数据类型能够存储更大的文本数据,可以比 VARCHAR 类型存储更多的字符串。更好的数据可读性
:由于 CLOB 数据类型存储的是文本类型数据,因此更适合用于存储一些易于阅读的模板或模版化的文本数据。更好的应用支持
:使用 CLOB 数据类型可以方便地支持诸如邮件和文档等应用类型。
- 缺点:
1.更大的存储需求
:CLOB 数据类型需要更多的硬件资源,这可能会导致数据库在存储和读取 CLOB 数据时的性能受到影响。
2.大量的读写延迟
:由于 CLOB 数据类型需要更多的硬件资源,因此读写延迟可能会较大。
3.数据存储时的限制
:CLOB 数据类型的存储需要在数据库中创建一个单独的列,而且只能用于保存文本数据。
CLOB 数据类型存储需要更多的硬件资源,因此,对于一些要求
高效的应用,可能不太适用
。但是,从扩展性
和可读性
方面来看,CLOB 数据类型是非常有价值的。它可以存储更多的数据,更容易阅读和支持不同的应用程序
。
2.读取clob
使用jdbc连接的实例:
private static List<Map<String, Object>> getList(ResultSet rt) throws SQLException {List<Map<String, Object>> list = new ArrayList<>();ResultSetMetaData md = rt.getMetaData();int columnCount = md.getColumnCount();val colNames = getColNames(md, columnCount);//遍历结构集while (rt.next()) {Map<String, Object> rowData = new LinkedHashMap<>();for (int i = 0; i < columnCount; i++) {val colName = colNames.get(i);Object value = rt.getObject(colName);// 判断是否为Clob数据类型if (value instanceof Clob) {value = parseClob((Clob) value);}rowData.put(colName, value);}list.add(rowData);}return list;}/*** 读取Clob类型的数据并转换为String*/private static String parseClob(Clob clob) {try {Reader is = clob.getCharacterStream();// 得到流BufferedReader br = new BufferedReader(is);String s = br.readLine();StringBuilder sb = new StringBuilder();while (s != null) {sb.append(s);s = br.readLine();}return sb.toString();} catch (SQLException | IOException e) {log.error("clob转换发生异常", e);throw new Exception(clob转换发生异常."+ e.getMessage());}}