Oracle CLOB vs BLOB

问题描述 投票:-1回答:1

我想知道Oracle的CLOB通过BLOB数据类型提供了什么。 Both的数据存储限制为(4 GB - 1)* DB_BLOCK_SIZE。

长度超过4000字节的文本字符串不适合VARCHAR2列。现在,我也可以使用CLOB和BLOB来存储这个字符串。

每个人都说,CLOB很好用于字符数据,而BLOB用于二进制数据,如图像,非结构化文档。

但我发现我也可以将字符数据存储在BLOB中。

我想知道的:

所以,问题在于基础知识,为什么CLOB以及BLOB为什么不总是?编码有什么关系吗?

可能是问题标题应该是,CLOB如何处理字符数据的方式与BLOB不同?

oracle blob
1个回答
0
投票

我想知道BLOB如何处理字符类型数据。

它不会将其视为字符类型数据,它只将其视为字节流 - 它不知道或不关心它代表什么。

From the documentation

BLOB数据类型存储非结构化二进制大对象。 BLOB对象可以被认为是没有字符集语义的比特流。


clob是否存储conding信息并在检索数据时使用它?

不明确,但数据存储在数据库字符集中,与VARCHAR2数据一样。 From the documentation again

CLOB数据类型存储单字节和多字节字符数据。支持固定宽度和可变宽度字符集,并且都使用数据库字符集。

您可能还注意到dbms_lob包具有在CLOB和BLOB数据类型之间进行转换的过程。对于这两者,您必须指定要使用的字符集。因此,如果您选择将字符数据存储为BLOB,则在将其转换为BLOB时必须知道字符集,但更重要的是,您必须知道字符集才能将其转换回来。你可以做到,但这并不意味着你应该这样做。在尝试将其转换为字符串之前,您无法验证BLOB数据。

正如@APC所提到的,这类似于将日期存储为字符串 - 您使用正确的数据类型会给您带来优势和类型安全性,而无需额外增加额外的痛苦,不确定性和开销。

问题不在于CLOB对BLOB存储字符数据的优势;问题恰恰相反:BLOB对CLOB存储的字符数据有什么优势?答案通常是没有。

@Boneist提及the recommendation to store JSON as BLOBs,还有更多关于here

(我可以想到的唯一其他原因是你必须存储来自多个源字符集的数据,并希望保留它们,就像你收到它们一样。但是你要么只是存储它们而且永远不会检查或操纵它们。来自数据库本身的数据,并且只会将它们返回到一些未受影响的外部应用程序;在这种情况下,您不关心字符集 - 因此您处理的是纯二进制数据,不应将其视为字符数据毕竟,你关心的是你所存储的图像是PNG与JPG还是其他什么。或者你需要处理数据,因此必须记录每个BLOB对象所代表的字符集,所以你可以根据需要进行转换。)

© www.soinside.com 2019 - 2024. All rights reserved.