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

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

  • CLOB是像XML,JSON等文本。你不应该假设数据库将它存储为(至less在一个应用程序)的编码,因为它将被转换为数据库configuration使用的任何编码。
  • BLOB是用于二进制数据的。 你可以合理地保证,他们将被存储如何发送他们,你会得到与他们发送完全相同的数据他们。

换句话说,我有一些二进制数据(在这个例子中是一个腌制的python对象)。 我需要确定的是,当我发送它时,它将被精确地存储到我发送它的时间,而当我把它发回时它将完全一样。 BLOB是我想要的,对吗?

为此使用CLOB真的可行吗? 还是会字符编码造成足够的问题,这是不值得的?

CLOB是编码和校对敏感的, BLOB不是。

当你用CL8WIN1251编写CLOB ,你写了一个0xC0 (这是西里尔字母А)。

当您使用AL16UTF16读取数据时,您将返回0x0410 ,这是此字母的UTF16表示forms。

如果您正在读取BLOB ,则会返回相同的0xC0

你的理解是正确的。 既然你提到了Python,想想Python 3中string和字节的区别:CLOB和BLOB是非常类似的,CLOB的编码不在你的应用程序的控制之下。