#sql #oracle #oracle12c
#sql #Oracle #oracle12c
Вопрос:
У меня проблема с двоичными данными, у меня есть код на C #, который вставляет двоичные данные в таблицу, тип столбца — RAW(64)
, в некоторых случаях некоторые байты отсутствуют. Я обнаружил, что проблема в том, что если мои данные начинаются с 0xFFFE
, я смог создать такую ситуацию в sql:
CREATE TABLE BlobTable(
testData BLOB
);
затем я вставляю записи:
INSERT INTO BlobTable VALUES(hextoraw('FFFE01'));
INSERT INTO BlobTable VALUES(hextoraw('01'));
INSERT INTO BlobTable VALUES(hextoraw('FFFF01'));
INSERT INTO BlobTable VALUES(hextoraw('FFFEFFFEFFFE01'));
затем я делаю:
SELECT DUMP ( CAST ( testData AS RAW( 128 ) ) ) FROM BlobTable;
и в результате получается:
Typ=23 Len=1: 1
Typ=23 Len=1: 1
Typ=23 Len=3: 255,255,1
Typ=23 Len=5: 255,254,255,254,1
Итак, полагаю, что проблема заключается в 0xFFFE
байтах в начале, в обоих случаях, когда я конвертирую эти байты в RAW, first 0xFFFE
отсутствует. У вас есть какие-либо идеи, почему это происходит? Также мне интересно, создает ли какая-либо другая комбинация байтов такую же ситуацию.
Комментарии:
1.Он воспринимается как непригодный для использования символ Юникода — unicode-symbol.com/u/FFFE.html support.microsoft.com/en-us/help/904803 /…
2. Да, но 1) RAW не следует интерпретировать каким-либо образом
The RAW and LONG RAW datatypes are used for data that is not to be interpreted (not converted when moving data between different systems) by Oracle Database.
2) почему он пропускает только first uFFFE3. Какая версия Oracle? Для меня это отлично работает на 11.2
4. @MarmiteBomber Я проверил этот код на Oracle 11.2g, и он работает нормально, затем я проверил на livesql.oracle.com и я получил точно такой же результат, как и опубликованный. Возможно, в новейшей версии Oracle есть ошибка?
5. Я поднял вопрос в Oracle, посмотрим. В любом случае, спасибо @MarmiteBomber за информацию о том, что она отлично работает в более старой версии, которая помогла мне определить, что проблема может быть не в моем коде.