Oracle 甲骨文CLOB vs BLOB

Oracle 甲骨文CLOB vs BLOB,oracle,blob,Oracle,Blob,我想知道Oracle的CLOB在BLOB数据类型上提供了什么。 数据存储限制为(4 GB-1)*DB_块大小 超过4000字节的文本字符串不能放入VARCHAR2列。现在,我可以使用CLOB和BLOB来存储这个字符串 大家都说,CLOB很好,适用于字符数据,而BLOB适用于二进制数据,如图像、非结构化文档 但我发现我也可以在BLOB中存储字符数据 我想知道的: 所以,问题是基本的,为什么总是CLOB和BLOB?这和编码有关吗 可能问题的标题应该是,CLOB如何以不同于BLOB的方式处理字符数据?

我想知道Oracle的CLOB在BLOB数据类型上提供了什么。 数据存储限制为(4 GB-1)*DB_块大小

超过4000字节的文本字符串不能放入VARCHAR2列。现在,我可以使用CLOB和BLOB来存储这个字符串

大家都说,CLOB很好,适用于字符数据,而BLOB适用于二进制数据,如图像、非结构化文档

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

我想知道的:

所以,问题是基本的,为什么总是CLOB和BLOB?这和编码有关吗

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

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

它不把它当作字符类型的数据,它只把它看作一个字节流——它不知道或不关心它代表什么

:

BLOB数据类型存储非结构化二进制大型对象。BLOB对象可以看作是没有字符集语义的位流


clob是否将条件信息与它一起存储,并在检索数据时使用它

不明确,但数据存储在数据库字符集中,如
VARCHAR2
data.:

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

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

正如@APC所提到的,这类似于将日期存储为字符串-您失去了使用正确数据类型所带来的优势和类型安全性,反而增加了额外的痛苦、不确定性和开销,而没有任何好处

问题并不是CLOB在存储字符数据方面比BLOB有什么优势;问题恰恰相反:BLOB在存储字符数据方面比CLOB有哪些优势?答案通常是没有

@Boneist提到了这一点,还有更多


(我能马上想到的唯一其他原因是,您必须存储来自多个源字符集的数据,并希望保留它们与接收到的数据完全相同。但是,要么您只存储它们,永远不会检查或操作数据库本身中的数据,只会将它们返回到某个外部应用程序u。)ntouched;在这种情况下,您不关心字符集-因此,您处理的是纯二进制数据,不应该将其视为字符数据,就像您关心存储的图像是PNG与JPG或其他什么一样。或者,您需要处理数据,因此必须记录每个BLOB对象所代表的字符集重新提交,因此您可以根据需要进行转换。)

在带有blob列的表上运行一个
select*from…
,然后快速告诉我blob中的文本是什么。如果您无法读取,请告诉我使用哪种编码来存储字节,如果要将原始字节转换回可读字符串,您必须知道这一点。为什么不使用CLOB来存储字节racter数据?这就像在日期列中存储日期,在数字列中存储数值:为要存储的数据使用最合适的数据类型。所有与字符串相关的函数,如
REGEXP_xxx
SUBSTR
xPAD
xTRIM
等,仅适用于
CLOB
,而不适用于
BLOB
>你为什么要把字符数据存储在<代码> BLB< <代码>?最多只能从BLOB中选择字节,而不是字符。如果您知道字符所代表的字符集,则该选择可能表示字符,以便可以转换它们;但如果它们来自多字节字符集,则可能会将单个字符一分为二,而无法转换。(或者错误地转换它,不要注意。)FWIW,Oracle建议存储JSON(即文本)在BLOB数据类型中:列出了一些原因;主要围绕字符集转换和大小。谢谢。这在一定程度上有所帮助,并指出了数据库字符集在CLOB/varchar与BLOB/binary存储中的作用。这还突出了使用BLOB而不是CLOB时的一些特殊情况。其中说:“在AL32UTF8数据库中,
CLOB
实例使用UCS2字符集存储”-这是真的吗?UCS-2只能表示字符,因此不能“使用Unicode”".UCS-2是,我认为Oracle仍然引用它。是的,不确定;也没有太大帮助。我决定不再深入研究JSON的内容,但只想提到它,正如Boneist指出的那样——我试图停在“通常没有”,我不确定“通常”,但我想有人会指出如果obs是合法的治疗用途。(如果/当人们想到它们时,很高兴有更多的添加!)