HANA:数据类型BLOB的“数据库”列中的未知字符

时间:2019-03-26 14:53:45

标签: sql hana character-set

我需要有关如何将数据库字段中未知类型的字符解析为可读格式的帮助,因为我需要使用另一个有效值(应用程序将其存储在的准确格式)覆盖数据库级别的该值系统复制活动。

我有一个专有的应用程序,该应用程序还允许用户通过前端对其进行配置。该配置数据存储在表中,配置属性的值存储在“ BLOB”类型的列中。对于此处所需的值,我在应用程序前端中提供了一个有效的URL(例如http://myserver:8080)。但是,存储在数据库中的内容不可读(某些正方形字符)。我尝试了HANA的各种转换函数(HEX,二进制),这些函数简单且以级联的方式(例如,首先转换为二进制,然后转换为varchar)使其可读。另外,我尝试了另一种方法,使要插入的值以正确的格式显示(通过十六进制或二进制转换为BLOL),但这也不起作用。我将值复制到剪贴板并将其与各种字符集表进行了比较(尽管我不确定这是否完全可以工作)。

我的转换尝试看起来像这样:

SELECT TO_ALPHANUM('') FROM DUMMY;

,而方括号中将包含有问题的字符。我什至不能在这里打印它们。

如何解决这个问题,并找出本应用程序使用的字符集?我希望能有更多的想法。

2 个答案:

答案 0 :(得分:1)

BLOB列中的内容是一系列字节。如您所述,这些字节是由使用未知字符集的应用程序写入的。

为了正确解释这些字节,您需要了解字符集,因为这实际上是字节到字符或字符标识符(例如,UTF中的代码点)的映射。

现在,HANA并没有很多选择来处理LOB数据,对于C(haracter)LOB数据,大多数操作都隐式地执行了对字符串数据类型的转换。

因此,我建议编写一个自定义应用程序,该应用程序能够读取BLOB字节并在该自定义应用程序中执行转换。成功转换为字符串后,您可以将数据存储在新的NVCLOB字段中,使其保持为UTF-8编码。

不过,您首先必须知道字符集。没办法解决。

答案 1 :(得分:0)

我假设您在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个字符以下的值。