2010-07-15 4 views
0

Я хочу хранить короткий массив из 64 байтов в базе данных Oracle (хэш пароля). Я думал, что char(64 byte) - это то, что мне нужно, но похоже, что он не работает. В Microsoft SQL я использую типы binary и varbinary. Какой тип я должен использовать в Oracle?Как хранить массив байтов в Oracle?

Каждый пример, который я нашел, использует blob для хранения двоичных данных, но я полагаю, что blob предназначен только для больших объектов, а не для коротких массивов фиксированного размера.

При обновлении данных, это код, как этот целесообразными:

byte[] passwordHash = GenerateHash(); 

using (OracleCommand updateHash = new OracleCommand("update A set passwordHash = :hash where EntryId = :id", oracleConnection)) 
{ 
    updateHash.Parameters.Add(":hash", passwordHash); 
    updateHash.Parameters.Add(":id", entryId); 

    if (updateHash.ExecuteNonQuery() != 1) 
    { 
     // ... 
    } 
} 

или я что-то отсутствует и параметры байт массива не могут быть добавлены, как это?

ответ

1

В дополнение к blob, Oracle, также имеет тип данных RAW,

RAW является переменной длиной слова, как тип данных VARCHAR2

- Oracle 10g Release 2 Datatypes

RAW можно настроить до максимального размера 2000 байт, с LONG RAW с максимальным размером 2 ГБ.

Однако:

Oracle настоятельно рекомендует преобразовать LONG RAW столбцов в бинарных больших объектов (BLOB) столбцов. Столбцы LOB: с гораздо меньшими ограничениями, чем ДОЛГОВЫЕ столбцы.

1

Лучшим решением является использование типа данных RAW, который предназначен для хранения двоичных данных. Однако данные RAW вставляются и извлекаются как шестнадцатеричные значения, поэтому может потребоваться некоторое преобразование.

Вы также должны использовать CHAR или VARCHAR2, но эти типы данных не будут ограничивать поле только двоичными данными. Если вы сообщите нам, какую ошибку вы получали при попытке вставить в колонку CHAR, мы можем помочь вам в этом ...

Имейте в виду, что если вы используете тип данных CHAR, то значения CHAR всегда добавляются к длине поля, поэтому вам может потребоваться обрезать меньшие значения перед их использованием в некоторых случаях.

3

В Oracle тип данных RAW подходит для хранения двоичных значений.

Проблема с использованием символьных типов данных для хранения двоичных данных заключается в том, что значения подчиняются набору символов набора.

Если набор символов клиента не соответствует набору символов базы данных, тогда значения подлежат переводу. (То есть двоичное значение в одной кодировке представляет конкретный символ, но этот символ может быть представлен другим двоичным значением в другом наборе символов.

С символьным типом данных Oracle сохраняет значение «символ», а не закодированное двоичное значение.

Если вы хотите использовать тип данных символа (например, CHAR или VARCHAR2) для хранения двоичных значений, то вам действительно необходимо закодировать двоичное значение как обычный текст, а также сохранить и получить закодированное значение. Два популярных кодировки двоичного кода - шестнадцатеричные и base64 (uuencode).

Oracle предоставляет встроенные функции RAWTOHEX и HEXTORAW для кодирования и декодирования двоичных (RAW-данных) в виде шестнадцатеричных строк (тип данных VARCHAR2).

Смежные вопросы