Помогите мне понять разницу между CLOB и BLOB в Oracle - PullRequest
39 голосов
/ 19 июня 2009

Это в основном просто вопрос типа «проверь мое понимание». Вот мое понимание CLOB и BLOB, как они работают в Oracle:

  • CLOB для текста, такого как XML, JSON и т. Д. Вы не должны предполагать, в какой кодировке база данных будет хранить ее (по крайней мере в приложении), поскольку она будет преобразована в любую кодировку, в которой база данных была настроена для использования.
  • BLOB предназначены для двоичных данных. Вы можете быть разумно уверены, что они будут храниться в том виде, в котором вы их отправили, и что вы получите их обратно с точно такими же данными, как они были отправлены.

Другими словами, скажем, у меня есть некоторые двоичные данные (в данном случае это маринованный объект python). Я должен быть уверен, что когда я отправлю его, он будет сохранен в точности так, как я его отправил, и что когда я его верну, он будет точно таким же. BLOB - это то, что я хочу, правильно?

Реально ли использовать CLOB для этого? Или кодирование символов вызовет достаточно проблем, что оно того не стоит?

Ответы [ 2 ]

54 голосов
/ 19 июня 2009

CLOB чувствительно к кодированию и сопоставлению, BLOB - нет.

Когда вы пишете в CLOB с помощью, скажем, CL8WIN1251, вы пишете 0xC0 (что означает кириллицу А).

Когда вы читаете данные обратно, используя AL16UTF16, вы получаете обратно 0x0410, что является UTF16 представлением этой буквы.

Если бы вы читали с BLOB, вы бы получили 0xC0 обратно.

10 голосов
/ 19 июня 2009

Ваше понимание верно. Поскольку вы упоминаете Python, подумайте о различии между строками и байтами в Python 3: CLOB и BLOB довольно аналогичны, с той дополнительной проблемой, что кодирование CLOB не находится под контролем вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...