SQL Server:我可以在nvarchar列中保存二进制数据吗?

时间:2012-11-07 09:49:26

标签: sql-server

我知道您可以将binary data转换为nvarchar并保存在nvarchar列中,然后在检索时将其转换回binary。这是否会始终正确地为您提供原始的binary数据?或者翻译中有什么东西搞砸了?

我问,因为我们有一个nvarchar列,用纯文本保存密码。我希望将此更改为以加密文本保存PW。如果我使用函数EncryptByPassPhrase,则返回varbinary。我想知道我是否可以将输出从EncryptByPassPhrase转换为nvarchar并保存在相同的密码列中。这比创建varbinary类型的新列以保存加密的PW更容易。

所以我建议我转换当前的密码:

UPDATE Users 
SET Password = CONVERT(nvarchar(200), EncryptByPassPhrase('whatever', Password))

然后我会解密并检索PW,如:

SELECT CONVERT(nvarchar(200), DecryptByPassPhrase('whatever', Password)) AS PW 
FROM Users

这总能正常运作吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

忽略这是否是一个好主意,以下查询似乎表明所有两个字节组合都正确地往返。

WITH T1 AS
(
SELECT 
      TOP 65536 CAST(ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 32769 AS SMALLINT) RN
FROM master..spt_values v1, master..spt_values v2
), T2 AS 
(
SELECT CAST(CAST(RN AS BINARY(2)) AS NCHAR(1)) AS NC,
       RN
FROM T1 
)
SELECT *
FROM T2 
WHERE CAST(CAST(NC AS BINARY(2)) AS SMALLINT) <> RN