Я пишу скрипт миграции Java (ok, Groovy, но это не имеет значения) для копирования полей BLOB из базы данных Oracle10g в другую. Данные были созданы приложением MS Access. У файлов, похоже, есть некорректная кодировка, и я предполагаю, что MS Access или драйвер ODBC каким-то образом управляют файлом.Доступ к BLOBS в базе данных Oracle10g, созданной с помощью MS Access
Использование запроса SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';
Я узнал, что исходная база данных имеет набор символов WE8MSWIN1252
.
Таблица источника определяется как:
CREATE TABLE CTR_DOCUMENTS (
CTR_ID NUMBER(11) NOT NULL,
CTR_A_ID NUMBER(11),
CTR_FILENAME VARCHAR2(260 Char) NOT NULL,
CTR_COMMENT VARCHAR2(255 Char),
CTR_DATE DATE,
CTR_DATA BLOB
)
я получить доступ к сгустки так:
def blob = sourceDB.firstRow("SELECT CTR_DATA FROM CTR_DOCUMENTS WHERE CTR_ID = ?",
[id]).CTR_DATA
def blobSize = blob.length()
def blobStream = blob.getBinaryStream()
byte[] byteArray = new byte[blobSize]
blobStream.read(byteArray)
я сохранил некоторые из сгустков в виде файлов, и кодирование выглядит странно и файлы не могут открываться их программами. Второй байт всегда 00:
0000000: 2500 5000 4400 4600 2d00 3100 2e00 3500 %.P.D.F.-.1...5.
Я также наблюдать такое же поведение доступа к BLOBS с SQL Client (SQL Инструментальные средства/J, SQLDeveloper, ЖАБЫ).
Для меня это похоже на то, что мне нужно преобразовать файл из Windows-1252 в UTF8, но это не сработает. Я что-то упустил?
BLOB, которые являются двоичными файлами, не должны иметь кодировку символов. CLOB, которые представляют текст, могут иметь кодировку. – GriffeyDog
Можете ли вы добавить определение таблицы Oracle на свой вопрос? – ThinkJet
Скопировали файлы в другую базу данных Oracle? Если да, почему бы не использовать ссылку базы данных? См. Http://stackoverflow.com/questions/6022706/is-there-a-way-to-copy-blob-records-between-databases-in-oracle-10g –