Помогите мне понять разницу между CLOB и BLOB в Oracle
В основном это вопрос типа "проверить мое понимание". Здесь я понимаю CLOB и BLOB как они работают в Oracle:
- CLOB для текста, такого как XML, JSON и т.д. Вы не должны предполагать, какая кодировка будет храниться в базе данных (как минимум в приложении), поскольку она будет преобразована в любую кодировку, которую была настроена база данных.
- BLOB файлы предназначены для двоичных данных. Вы можете быть уверены, что они будут сохранены, как вы их отправляете, и что вы получите их обратно с точно такими же данными, как они были отправлены как.
Итак, другими словами, скажем, у меня есть несколько двоичных данных (в данном случае маринованный объект python). Я должен быть уверен, что когда я отправлю его, он будет сохранен точно, как я его отправил, и что, когда я его верну, он будет точно таким же. BLOB - это то, что я хочу, правильно?
Можно ли использовать CLOB для этого? Или кодировка символов вызовет достаточно проблем, чтобы она не стоила?
Ответы
Ответ 1
CLOB
- это кодирование и сортировка, BLOB
- нет.
Когда вы пишете в CLOB
, используя, скажем, CL8WIN1251
, вы пишете 0xC0
(это кириллическая буква А).
Когда вы читаете данные с помощью AL16UTF16
, вы возвращаетесь назад 0x0410
, который является UTF16
представлением этой буквы.
Если вы читали с BLOB
, вы получили бы тот же 0xC0
назад.
Ответ 2
Ваше понимание верное. Поскольку вы упоминаете Python, подумайте о различии Python 3 между строками и байтами: CLOB и BLOB вполне аналогичны, а дополнительная проблема заключается в том, что кодировка CLOB не находится под контролем вашего приложения.