Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:我可以将二进制数据保存在nvarchar列中吗?_Sql Server - Fatal编程技术网

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

Sql server SQL Server:我可以将二进制数据保存在nvarchar列中吗?,sql-server,Sql Server,我知道您可以将二进制数据转换为nvarchar并保存在nvarchar列中,然后在检索时将其转换回二进制。这会一直正常工作,为您提供原始二进制数据吗?或者在翻译过程中可能会有什么问题 我这样问是因为我们有一个nvarchar列,它以纯文本形式保存密码。我想将此更改为以加密文本保存PWs。如果我使用函数EncryptBypass,它将返回varbinary。我想知道我是否可以将EncryptBypassPhase的输出转换为nvarchar并保存在同一密码列中。这将比创建一个varbinary类型

我知道您可以将二进制数据转换为nvarchar并保存在nvarchar列中,然后在检索时将其转换回二进制。这会一直正常工作,为您提供原始二进制数据吗?或者在翻译过程中可能会有什么问题

我这样问是因为我们有一个nvarchar列,它以纯文本形式保存密码。我想将此更改为以加密文本保存PWs。如果我使用函数EncryptBypass,它将返回varbinary。我想知道我是否可以将EncryptBypassPhase的输出转换为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
这会一直正常工作吗


提前谢谢

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

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

你不应该加密密码,你应该对它们进行散列,然后比较散列的结果。同样,你不应该加密密码,你应该用盐对它们进行散列,然后比较散列的结果。SQL Server中的二进制数据属于列,而不是NVARCHAR。