【问题标题】:Firebird encode/decode base64Firebird 编码/解码 base64
【发布时间】:2020-03-17 12:56:13
【问题描述】:

Firebird 中是否有任何编码/解码 base 64 的功能? 在 SQL Server 中有一种使用 xml 的技术:

declare @source varbinary(max)=convert(varbinary(max),'AbdalrahmanIbnSewareddahab')
SELECT CAST('' AS XML).value('xs:base64Binary(sql:variable(''@source''))','VARCHAR(MAX)') as BASE64_ENCODED;

结果是 QWJkYWxyYWhtYW5JYm5TZXdhcmVkZGFoYWI=

如何在 Firebird(2.5 或 3.0)中做到这一点?

【问题讨论】:

  • 你可以为它写一个 UDF,就像这个论坛帖子(俄语)sql.ru/forum/1320646/proshu-pomoshhi-po-udf - 但是与 BLOB 相关的 UDF 需要准确的编码。或者,您可以在 PSQL 中编写 base64 算法并将其包装到存储过程或存储函数(仅限 FB3)中。这并不难,因为 base64 算法很简单。但可能效率不高,因为 PSQL 没有指针或索引数组。也就是说,人们过去使用 SP 计算 MD5,而且计算量更大。仍然适用于中低负载。

标签: encoding base64 firebird decoding


【解决方案1】:

Firebird 3 或更早版本没有内置这样的功能。 Firebird 4 将引入内置函数BASE64_ENCODEBASE64_DECODE 在二进制数据和base64 编码字符串之间进行转换。不过,目前 Firebird 4 仍在开发中。

另一种方法是自己编写一个,可以作为 UDF(Firebird 3 及更早版本)、存储过程(所有 Firebird 版本)、UDR(Firebird 3 及更高版本)或 PSQL 函数(Firebird 3 及更高版本) .

【讨论】:

  • @Arioch'The 可以工作,但比函数更难使用。
  • @Arioch'我只是想将使用作为一个函数,但我添加了选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多