在引用问题Base64 encoding in SQL Server 2005 T-SQL之后,我尝试从sql表中获取某些数据的base64值,但与直接文本值相比,它没有给出正确的值。
使用直接文字:
SELECT CAST('?' as varbinary) FOR XML PATH(''), BINARY BASE64
将值Pw==
设为正确且解码为?
使用数据库条目:
SELECT CAST([Col] as varbinary) from tblTable FOR XML PATH(''), BINARY BASE64
[Col]
值= ?
,输出为PwA=
,解码时给出?和一个额外的不可打印的角色。
使用len函数检查时的屏幕截图。
这样做的原因是我想使用update语句将少数列的数据从纯文本转换为base64,这只是示例值,而实际值是更大的文本,它也存在这个问题,但每个字符。
编辑:这是从ASP.Net解码时,如果它在标签上,那么它会正确显示,但在文本框中使用时会显示额外的垃圾字符。
答案 0 :(得分:1)
两件事:
首先,"直接文字"例如:
SELECT CAST('?' as varbinary) FOR XML PATH(''), BINARY BASE64
----
Pw==
将单字节(VARCHAR
)字符编码为base 64.
对于NVARCHAR
,每个字符类型2个字节,它应该是:
SELECT CAST(N'?' as varbinary) FOR XML PATH(''), BINARY BASE64
----
PwA=
在问题的sceond部分,询问为什么在解码先前编码的NVARCHAR
类型列时会产生额外的字符。您实际上将2个字节编码为基数64并将其转换为2个单字节(VARCHAR
)字符。
要解码为NVARCHAR
,您需要执行此操作:
SELECT CAST(CAST( 'PwA=' as XML ).value('.','varbinary(max)') AS NVARCHAR(250) )
---
?