帮我理解Oracle中CLOB和BLOB的区别

Posted

技术标签:

【中文标题】帮我理解Oracle中CLOB和BLOB的区别【英文标题】:Help me understand the difference between CLOBs and BLOBs in Oracle 【发布时间】:2010-11-04 07:43:00 【问题描述】:

这主要只是一个“检查我的理解”类型的问题。以下是我对 CLOB 和 BLOB 在 Oracle 中工作的理解:

CLOB 用于 XML、JSON 等文本。您不应假设数据库会将其存储为何种编码(至少在应用程序中),因为它将转换为数据库配置使用的任何编码。李> BLOB 用于二进制数据。您可以放心,它们将以您发送它们的方式存储,并且您将使用与它们发送时完全相同的数据取回它们。

换句话说,假设我有一些二进制数据(在本例中是一个腌制的 Python 对象)。我需要保证,当我发送它时,它将完全按照我发送它的方式存储,并且当我取回它时它会完全一样。 BLOB 是我想要的,对吗?

为此使用 CLOB 真的可行吗?还是字符编码会引起足够多的不值得的问题?

【问题讨论】:

除非您正在开发第三方实用程序,否则您不应尝试猜测数据库将如何存储其中任何一个。应该只信任尺寸指南。 【参考方案1】:

CLOB 对编码和排序规则敏感,BLOB 不是。

当您使用CL8WIN1251 写入CLOB 时,您会写入0xC0(这是西里尔字母А)。

当您使用AL16UTF16 读回数据时,您会返回0x0410,这是这封信的UTF16 表示。

如果您正在阅读 BLOB,您将得到相同的 0xC0 回复。

【讨论】:

【参考方案2】:

你的理解是正确的。既然您提到了 Python,请考虑一下 Python 3 中字符串和字节之间的区别:CLOB 和 BLOB 非常相似,还有一个额外的问题是 CLOB 的编码不受您的应用程序的控制。

【讨论】:

以上是关于帮我理解Oracle中CLOB和BLOB的区别的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中的BLOB和CLOB字段类型的区别

从 DB2 和 Oracle 角度看 CLOB 和 BLOB 的区别?

CLOB和BLOB的区别

java操作oracle的blob,clob数据

Oracle中Blob和Clob

Oracle中Blob和Clob