Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Help me understand the difference between CLOBs and BLOBs in Oracle

Tags:

python

oracle

This is mainly just a "check my understanding" type of question. Here's my understanding of CLOBs and BLOBs as they work in Oracle:

  • CLOBs are for text like XML, JSON, etc. You should not assume what encoding the database will store it as (at least in an application) as it will be converted to whatever encoding the database was configured to use.
  • BLOBs are for binary data. You can be reasonably assured that they will be stored how you send them and that you will get them back with exactly the same data as they were sent as.

So in other words, say I have some binary data (in this case a pickled python object). I need to be assured that when I send it, it will be stored exactly how I sent it and that when I get it back it will be exactly the same. A BLOB is what I want, correct?

Is it really feasible to use a CLOB for this? Or will character encoding cause enough problems that it's not worth it?

like image 520
Jason Baker Avatar asked Jun 19 '09 13:06

Jason Baker


People also ask

What is BLOBs and CLOBs?

The full form of Blob is a Binary Large Object. The full form of Clob is Character Large Object. This is used to store large binary data. This is used to store large textual data.

What is a BLOB in Oracle?

A BLOB (binary large object) is a varying-length binary string that can be up to 2,147,483,647 characters long.

What is the use of BLOB CLOB datatypes in JDBC?

BLOBs are used to store binary information, such as images, while CLOBs are used to store character information. BLOBs and CLOBs can store up to 4 Gigabytes of data (the limit imposed by the JDBC and ODBC specifications).


1 Answers

CLOB is encoding and collation sensitive, BLOB is not.

When you write into a CLOB using, say, CL8WIN1251, you write a 0xC0 (which is Cyrillic letter А).

When you read data back using AL16UTF16, you get back 0x0410, which is a UTF16 represenation of this letter.

If you were reading from a BLOB, you would get same 0xC0 back.

like image 181
Quassnoi Avatar answered Sep 23 '22 10:09

Quassnoi