我在C#和TSQL中有base64字符串编码/解码函数,我的问题是C#的编码结果与TSQL中的编码结果不同。
我的目标是:
C#
Convert.ToBase64String(Encoding.UTF8.GetBytes("test"));
Result: dGVzdA==
TSQL
SELECT CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:column("bin")))', 'NVARCHAR(MAX)') Base64Encoding
FROM
(
SELECT CAST(N'test' AS VARBINARY(MAX)) AS bin
) AS bin_sql_server_temp
Result: dABlAHMAdAA=
知道如何匹配结果吗?
答案 0 :(得分:4)
SQL Server正在使用UTF-16。您的C#代码使用的是UTF-8,因此存在差异。
要使C#代码使用UTF-16,您可以这样做:
Convert.ToBase64String(Encoding.Unicode.GetBytes("test"))
Result: dABlAHMAdAA=
答案 1 :(得分:1)
获得您的愿望结果使用以下TSQL
SELECT CAST('test' as varbinary(max)) FOR XML PATH(''), BINARY BASE64