数据库中的表中有一个字段,数据类型为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专栏中ùúûĀ......ĥ¥®¥
有人可以就如何正确显示这些价值提出建议吗?
提前谢谢。
答案 0 :(得分:1)
blob sub_type 0
是二进制blob。二进制blob没有字符集的概念。如果要包含字符集,则需要使用blob sub_type 1
(或blob sub_type text
)。
根据您在问题中显示的转化,看起来您将 UTF-8 存储到二进制blob中,然后将其检索为WIN1251或WIN1252。