什么数据可以存储在SQL Server的varbinary数据类型中?

时间:2010-07-18 12:46:45

标签: sql sql-server types varbinary

我有一个表,其中userpassword字段有varbinary数据类型,所以我很困惑,我应该以哪种形式将数据保存到userpassword字段,因为当我保存varchar数据时,它给了我错误。

4 个答案:

答案 0 :(得分:25)

varbinary列可以存储任何内容。要在其中存储字符串,您必须将其强制转换为varbinary

declare @t table (id int identity, pwd varbinary(50))
insert into @t (pwd) values (cast('secret' as varbinary(50)))

但是对于密码,varbinary列通常会存储某种哈希值。例如,使用HashBytes function的SHA1哈希:

insert into @t (pwd) values (HashBytes('sha1', 'secret'));

存储单向哈希而不是真实密码更安全。您可以检查密码是否匹配:

select * from @t where pwd = HashBytes('sha1', 'secret')

但是你无法通过查看表来检索密码。因此,只有最终用户才知道他的密码,甚至DBA也无法检索密码。

答案 1 :(得分:1)

您需要显式转换VARCHAR。

SELECT CAST(N'Test' as VARBINARY)

SQL Server错误消息说。

  

从数据类型varchar到varbinary的隐式转换不是   允许的。

答案 2 :(得分:1)

根据CAST上的大表和MSDN中的CONVERT,SQL Server需要从varchar to varbinary进行显式转换

该表将有一个varbinary列,用于存储根据sys.sql_logins

的散列值

答案 3 :(得分:0)

SELECT CAST(N'Test' as VARBINARY)

------您必须给它一个大小---------->

SELECT CAST(N'Test' as VARBINARY(30))