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) )
---
?
在提到问题 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) )
---
?