我试图在DB2数据库上以UTF8格式存储Unicode字符。我已经确认charset是1208,并且数据库被指定保存为UTF8。DB2 UTF-8数据存储 - 无关字节值
但是,当查询一些unicode数据时,我会得到奇怪的结果。
select hex(firstname), firstname, from my_schema.my_table where my_pk = 1234;
的结果如下:
C383C289 Ã
在结果的字符显示的是错误的。从我所收集的数据来看,它是由十六进制值“C383C289”表示的。插入时发送的实际字符为É,并应以UTF8的形式表示为C389。
在这个阶段,我假设它可能是我用来查询解释错误的数据的程序。但是十六进制值(第一个结果列)在多大程度上是错误的?它们在实际字节之间似乎没有使用绒毛“83C2”。或者,“C383C289”实际上是否正确,并且有些UTF8解码引擎无法处理绒毛?这对我来说似乎不太可能。
客户端(DB2 For Toad和WinSQL)都将字符显示为以UTF8表示为C383的字符。
*编辑。我在CLI上测试过,它正确地返回了É字符。我错过了什么吗? “十六进制”函数是否返回了它不应该是的东西?
看起来你的插入过程在某种程度上被打乱了。如果正确存储'É',十六进制值将是C383。 – mustaccio
@mustaccio C383是A,而不是E.注意,我刚刚从DB2 CLI进行了测试,似乎它以某种方式返回了E。 –
对不起,我的意思是C389 – mustaccio