You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用T-SQL生成符合标准的字符串Base64编码?

解决T-SQL字符串转Base64与UTF-8标准不一致的问题

问题根源

你遇到的编码差异,是因为T-SQL中直接CAST('ABCD' AS varbinary)时,使用了数据库默认的非UTF-8字符编码(通常是SQL Server默认的Latin1或UTF-16编码),而你期望的是基于UTF-8编码的Base64结果。比如ABCD被转成UTF-16时,每个字符占2字节(0x4100, 0x4200, 0x4300, 0x4400),生成的Base64串QQBCAEMARAA=解码后自然出现乱码。

正确实现方案

要生成符合UTF-8标准的Base64编码,需要先将字符串转换为UTF-8编码的二进制数据,再执行Base64转换,以下是两种可行方法:

方法1:使用CONVERT指定UTF-8编码(推荐,兼容SQL Server 2016+)

SELECT CONVERT(VARCHAR(MAX), 'ABCD', 65001)
FOR XML PATH(''), BINARY BASE64;

执行结果为QUJDRA==,这是ABCD基于UTF-8编码的标准Base64串。

方法2:SQL Server 2019+专属写法

利用UTF-8排序规则直接转换:

SELECT CAST(CAST('ABCD' AS VARCHAR(MAX)) COLLATE Latin1_General_100_CI_AS_SC_UTF8 AS VARBINARY(MAX))
FOR XML PATH(''), BINARY BASE64;

匹配目标网站结果的补充

你提到的目标网站结果QUJDRAo=,是因为编码时额外包含了换行符(\n)。如果需要完全匹配,只需在字符串末尾添加换行符即可:

SELECT CONVERT(VARCHAR(MAX), 'ABCD' + CHAR(10), 65001)
FOR XML PATH(''), BINARY BASE64;

执行后将得到QUJDRAo=,与目标网站结果完全一致。

解码验证

用你的C#代码解码生成的Base64串:

Encoding.UTF8.GetString(Convert.FromBase64String("QUJDRA=="))

将正确返回ABCD,符合预期。

内容的提问来源于stack exchange,提问作者kaito kumon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 17:15:09