2010-07-18 65 views

回答

19

一个varbinary列可以存储任何东西。要存储一个字符串的话,你必须将它转换为varbinary

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

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

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

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

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

但是,您无法通过查看表来检索密码。所以只有最终用户知道他的密码,甚至连DBA都不能检索它。

+0

我可以存储原始文件像音频文件? – JerryGoyal 2015-08-13 06:12:26

+0

@JerryGoyal是的。另一个通常做的事情是将更大的文件存储在磁盘上,然后将文件路径存储在数据库中 – iliketocode 2017-03-24 14:39:54

1

您将需要显式转换VARCHAR。

SELECT CAST(N'Test' as VARBINARY) 

SQL Server错误消息说。

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

相关问题