我想知道 Oracle 的 CLOB 必须通过 BLOB 数据类型提供什么。 两者都有 (4 GB - 1) * DB_BLOCK_SIZE 的数据存储限制。
长度超过 4000 字节的文本字符串不能放入 VARCHAR2 列。现在,我也可以使用 CLOB 和 BLOB 来存储这个字符串。
每个人都说,CLOB 很好,用于字符数据,而 BLOB 用于二进制数据,例如图像、非结构化文档。
但是我发现我也可以将字符数据存储在 BLOB 中。
我想知道的是:
所以,问题是关于基础的,为什么是 CLOB,为什么不总是 BLOB?和编码有关系吗?
可能问题标题应该是,CLOB 如何与 BLOB 不同地处理字符数据?
我想知道BLOB如何处理字符类型数据。
它不将其视为字符类型数据,它仅将其视为字节流 - 它不知道也不关心它代表什么。
从文档中:
BLOB 数据类型存储非结构化二进制大对象。BLOB 对象可以被视为没有字符集语义的比特流。
clob 是否会存储条件信息并在检索数据时使用它?
没有明确指出,但数据存储在数据库字符集中,与VARCHAR2数据一样。再次从文档中:
CLOB 数据类型存储单字节和多字节字符数据。支持固定宽度和可变宽度字符集,并且都使用数据库字符集。
您可能还注意到该dbms_lob包具有在 CLOB 和 BLOB 数据类型之间进行转换的过程。对于这两种情况,您都必须指定要使用的字符集。因此,如果您选择将字符数据存储为 BLOB,则在将其转换为 BLOB 时必须了解字符集,但也许更重要的是,您必须了解字符集才能将其转换回来。你可以这样做,但这并不意味着你应该这样做。在尝试将 BLOB 数据转换为字符串之前,您无法验证它。
正如 @APC 所提到的,这类似于将日期存储为字符串 - 您失去了使用正确的数据类型会给您带来的优势和类型安全性,反而增加了额外的痛苦、不确定性和开销,却没有任何好处。
问题实际上并不是 CLOB 在存储字符数据方面比 BLOB 有什么优势;而是 问题实际上是相反的:在存储字符数据方面,BLOB 比 CLOB 有什么优势?答案通常是没有。
@Boneist 提到了将 JSON 存储为 BLOB 的建议,这里还有更多相关内容。
(我能立即想到的唯一其他原因是,您必须存储来自多个源字符集的数据,并希望将它们完全保留为您收到的数据。但是,您要么只存储它们,而永远不会检查或操作来自数据库本身内部的数据,并且只会将它们原封不动地返回到某个外部应用程序;在这种情况下,您不关心字符集 - 因此您正在处理纯粹的二进制数据,不应将其视为字符数据无论如何,您不会关心您存储的图像是 PNG 还是 JPG 或其他什么。或者您将需要处理数据,因此必须记录每个 BLOB 对象代表的字符集,因此您可以根据需要进行转换。)
| 归档时间: |
|
| 查看次数: |
3589 次 |
| 最近记录: |