如果我在机器上的脚本中使用 SQL SERVER HASHBYTES() 函数,是否保证在另一台机器/实例上运行时产生相同的输出?
例如,将
SELECT HASHBYTES('SHA1', 'Hello World')
无论 SQL 版本、处理器架构等如何,生成相同的输出?
还会
SELECT HASHBYTES('SHA1', column1) from table1
如果列定义略有不同,则生成相同的输出 - 例如 varchar(50) 与 varchar(100)?
这里有什么需要考虑的吗?
对于不同的实例,HASHBYTES
如果运行相同的脚本,则无论服务器版本、处理器或架构如何,都应该返回相同的值:
我刚刚在 SQL Server 2005 和 SQL Server 2012 上在完全不同的硬件配置上运行了以下内容。两者都产生了输出0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA
SELECT HASHBYTES('SHA1', CAST('Test' AS VARCHAR(100)));
Run Code Online (Sandbox Code Playgroud)
但是,如果排序规则不同,则输出将不同。
在列定义方面,无论字段的长度如何,输出都应该相同。
以您的VARCHAR(50)
and为例VARCHAR(100)
,我们可以像这样测试输出:
SELECT HASHBYTES('SHA1', CAST('Test' AS VARCHAR(50)));
SELECT HASHBYTES('SHA1', CAST('Test' AS VARCHAR(100)));
Run Code Online (Sandbox Code Playgroud)
两个SELECT
语句都返回相同的值:
0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA
Run Code Online (Sandbox Code Playgroud)
但是,请注意,即使使用相同的字符串,VARCHAR
andNVARCHAR
也不会产生相同的HASHBYTES
值:
SELECT HASHBYTES('SHA1', CAST('Test' AS VARCHAR(50))); -- Returns 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA
SELECT HASHBYTES('SHA1', CAST('Test' AS NVARCHAR(100))); -- Returns 0x9AB696A37604D665DC97134DBEE44CFE70451B1A
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9795 次 |
最近记录: |