#sql #hana #character-set
#sql #hana #набор символов
Вопрос:
Мне нужна помощь в том, как преобразовать символы неизвестного типа из поля базы данных в читаемый формат, потому что мне нужно перезаписать это значение на уровне базы данных другим допустимым значением (в точном формате, в котором его сохраняет приложение), чтобы автоматизировать операции копирования в системе.
У меня есть собственное приложение, которое также позволяет пользователям настраивать его через интерфейс. Эти данные конфигурации сохраняются в таблице, а значения свойства конфигурации хранятся в столбце типа «BLOB». Для желаемого здесь значения я предоставляю действительный URL-адрес во интерфейсе приложения (напримерhttp://myserver:8080 ). Однако то, что сохраняется в базе данных, не читается (некоторые квадратные символы). Я перепробовал все виды функций преобразования HANA (шестнадцатеричный, двоичный), простым и каскадным способом (например, сначала в двоичный, затем в varchar), чтобы сделать его читаемым. Кроме того, я попробовал сделать наоборот и отобразить значение, которое я хочу вставить, в правильном формате (преобразование в BLOL вместо шестнадцатеричного или двоичного), но это тоже не работает. Я скопировал значение в буфер обмена и сравнил его со всеми видами таблиц набора символов (хотя я не уверен, что это вообще может работать).
Мои попытки преобразования выглядят примерно так:
SELECT TO_ALPHANUM('') FROM DUMMY;
в то время как скобки будут содержать соответствующие символы. Я даже не могу распечатать их здесь.
Как можно подойти к этому и, возможно, узнать набор символов, который используется этим приложением? Я был бы благодарен за дополнительные идеи.
Комментарии:
1. Большие двоичные объекты предназначены для двоичных данных, используйте тип данных CLOB или NCLOB для символьных данных.
Ответ №1:
То, что у вас есть в вашем столбце BLOB-объекта, представляет собой серию байтов. Как вы упомянули, эти байты были записаны приложением, которое использует неизвестный набор символов.
Чтобы правильно интерпретировать эти байты, вам необходимо знать набор символов, поскольку это буквально сопоставление байтов символам или идентификаторам символов (например, кодовым точкам в UTF).
Теперь HANA не поставляется с большим количеством опций для работы с данными большой емкости, в первую очередь, для данных большой емкости C (character) большинство манипуляций неявно выполняют преобразование в строковый тип данных.
Итак, я бы рекомендовал написать пользовательское приложение, которое способно считывать байты большого двоичного объекта и выполнять преобразование в этом пользовательском приложении. После успешного преобразования в строку вы можете сохранить данные в новом поле NVCLOB, которое сохраняет их в кодировке UTF-8.
Однако в первую очередь вам нужно будет знать набор символов. Обойти это невозможно.
Комментарии:
1. Я подозревал, что это будет единственный способ. Но попробовать стоило. Спасибо тебе, Ларс, и, кстати, спасибо за весь контент HANA за эти годы. Действительно полезный материал.
2. Спасибо за приятный отзыв @Laghorn! Ценю это — это очень мотивирует получать какой-то положительный отклик на контент, который я размещаю в «пустоте» Интернета. Приветствия!
Ответ №2:
Я предполагаю, что вы работаете в Oracle. Вы можете преобразовать BLOB в CLOB, как описано здесь.
http://www.dba-oracle.com/t_convert_blob_to_clob_script.htm
В случае вашего примера попробуйте этот запрос:
select UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(<your_blob_value)) from dual;
Очевидно, что это работает только для значений ниже 32767 символов.
Комментарии:
1. Извините, я на HANA. Тип столбца — blob, но суть моей проблемы в том (по крайней мере, я так думаю), что задействованное приложение использует странный набор символов, и поэтому я не могу прочитать содержимое. Любая заданная строка, которую я преобразую в BLOB, CLOB и NCLOB, остается читаемой. Таким образом, это не может быть связано с типом данных.