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

Posted

技术标签:

【中文标题】HANA:数据类型 BLOB 的数据库列中的未知字符【英文标题】:HANA: Unknown Characters in Database column of datatype BLOB 【发布时间】:2019-08-17 00:17:36 【问题描述】:

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

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

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

SELECT TO_ALPHANUM('') FROM DUMMY;

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

如何解决这个问题并找出该应用程序使用的字符集?如果有更多的想法,我将不胜感激。

【问题讨论】:

BLOB 用于二进制数据,字符数据使用 CLOB 或 NCLOB 数据类型。 【参考方案1】:

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

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

现在,HANA 并没有提供很多选项来处理 LOB 数据,而对于 C(字符)LOB 数据,大多数操作都会隐式执行到字符串数据类型的转换。

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

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

【讨论】:

我怀疑这是唯一的方法。但值得一试。感谢 Lars,顺便感谢多年来提供的所有 HANA 内容。非常有用的东西。 感谢@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 个字符的值。

【讨论】:

对不起,我在 HANA。列类型是 blob 但我的问题是(至少我认为),所涉及的应用程序使用了一个奇怪的字符集,因此我无法读取内容。我转换为 BLOB、CLOB 和 NCLOB 的任何给定字符串仍然可读。所以它不能与数据类型有关。

以上是关于HANA:数据类型 BLOB 的数据库列中的未知字符的主要内容,如果未能解决你的问题,请参考以下文章

为啥 getBlob() 从我的数据库中的 Blob 列中检索整数数据?

如何查询blob类型中存的是啥格式的文件

XMLHttpRequest 中 blob类型数据转text

ODAC 组件支持 Oracle 8 的 BLOB 和 CLOB 数据类型

[SAP HANA] 如何设定HANA数据库存的类型 生产/测试/开发/定制

将同一文件的多个 blob 合并为一个以获取原始 pdf 文件