TSQL - Base64 编码问题 - 文本 v/s 列

TSQL - Base64 Encoding Issues - text v/s column

在提到问题 Base64 encoding in SQL Server 2005 T-SQL 后,我尝试从 sql table 获取某些数据的 base64 值,但与直接文本值相比,它没有给出正确的值。

使用直接文本:

SELECT CAST('?' as varbinary) FOR XML PATH(''), BINARY BASE64

给出正确的值 Pw== 并解码为 ?

使用数据库条目:

SELECT CAST([Col] as varbinary) from tblTable FOR XML PATH(''), BINARY BASE64

with [Col] value = ?, 输出为 PwA= 解码时给出 ?和一个额外的非原则table字符。

Screenshot when checked using len function.

原因是我想使用更新语句将几列的数据从纯文本转换为 base64,这只是样本值,实际值是更大的文本,这也有这个问题,但每个字符都有。

编辑:当从 ASP.Net 解码时,如果它在标签上,则它会正确显示,但在文本框中使用时会显示多余的垃圾字符。

两件事:

首先,"Direct Text"例子:

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=

在你的问题的第二部分,询问为什么在解码你之前编码的 NVARCHAR 类型列的过程中会产生一个额外的字符。您实际上是将 2 个字节编码为 base 64,并将它们转换为 2 个单字节 (VARCHAR) 字符。

为了解码为 NVARCHAR,您需要这样做:

SELECT CAST(CAST( 'PwA=' as XML ).value('.','varbinary(max)') AS NVARCHAR(250) )

---
?