Firebird 2.5:无法正确显示存储在blob sub_type 0中的文本数据

时间:2015-07-05 11:21:47

标签: casting character-encoding blob firebird

数据库中的表中有一个字段,数据类型为BLOB SUB_TYPE 0。 它通常存储文本数据(该字段包含“付款说明”,因此大多数值包括'已成功发送','15 $去'以及该列中的等等)。我不知道该字段被设计为BLOB SUB_TYPE 0的目的是什么,但数据库是“按原样”提供的,我不能影响它。

我需要将该字段的内容显示为文本。

我该怎么做:

选择 cast(paym_desc as varchar(1000)) 来自付款

有效。 BUT。

适用于拉丁字符,数字和!@#$%^& *(){} []符号(我认为标准ASCII字符集中包含的符号) 当谈到西里尔文或欧元符号或英镑符号等时,我得到点而不是符号。

要解决这种情况,我尝试使用此处提供的解决方案重新编码列: Firebird 2.5.2 change blob subtype

我尝试过创建列 blob sub_type 0字符集win1251 和 blob sub_type 0字符集win1251 类型并在那里复制了我的付款说明。

它有点工作(没有点数!),但我(如预期的那样)在这些列中得到不同的值,没有包含我需要的东西。例如,如果我将付款说明设置为

ùúûĀąĈô£¥®҈ѾВАСЯвасяӃ€€€€

我得到了

Г№ГєГ»ДЂД...ĈÈ£¥®҈ѾР'АСЯвасяӃв,¬в,¬,в,¬,在win1251栏中 在win1252专栏中ùúûĀ......ĥ¥®¥

有人可以就如何正确显示这些价值提出建议吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

blob sub_type 0是二进制blob。二进制blob没有字符集的概念。如果要包含字符集,则需要使用blob sub_type 1(或blob sub_type text)。

根据您在问题中显示的转化,看起来您将 UTF-8 存储到二进制blob中,然后将其检索为WIN1251或WIN1252。