为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: --03134284194-20240812-238838-20108 Pack9
【操作系统】:WIN10
【CPU】: X86
【问题描述】*:
今天测试时,发现DM8在进行BASE64编码过程中,有时会把尾随的一个0x00值字节丢掉。为了验证,我同步核对了 Oracle、金仓、edb,都没有这个问题。
一个简单的测试例子如下:
/*
达梦
两种编码方法返回的都是 AQIDBA==
解码后得到的结果是 0x01020304,丢失了尾随的0x00
*/
SELECT 0x0102030400 AS DAT
,SUBSTR(TO_BASE64(0x0102030400),1,100) AS TO_B64
,BINTOCHAR(UTL_ENCODE.BASE64_ENCODE(0x0102030400)) AS B64_ENC
,SUBSTRBLB(FROM_BASE64(TO_BASE64(0x0102030400)),1,100) AS FROM_TO_B64;
/*
ORACLE
编码结果为 AQIDBAA=
解码结果是 0x0102030400 与原值一致
*/
SELECT '0102030400' AS DAT
,utl_i18n.raw_to_char(utl_encode.base64_encode(hextoraw('0102030400')))
,rawtohex(utl_encode.base64_decode(utl_i18n.string_to_raw('AQIDBAA=')))
FROM DUAL
为了判断什么情况会出现丢失尾随0值的问题,另作了一个测试,循环生成不同长度的raw串,并尾随0值字节,对比oracle的结果,发现每三个长度会出现一个有问题的结果,应该是编码处理过程有差异。
这个测试在oracle、金仓、edb中结果均一致。
这个情况在我手头测试用的两个版本中均可再现:
--03134284172-20240321-222308-20093
--03134284194-20240812-238838-20108 Pack9
还请帮忙测试核实,多谢。
感谢您的反馈,我们这边测试确实有您描述的情况,我们已经记录并反馈给开发,在新版本将进行修复