hashbytes为int返回不同的值?


那月静好
2025-03-10 03:19:34 (29天前)


在SQL Server上运行以下命令得到0xE864ECE8888043B67277C8B2CEFE96AD315FCCA4。

select hashbytes(‘SHA1’,cast(10 as varbinary(max)));
在Sybase上,以下SQL返回…

3 条回复
  1. 0# 不想吃东西 | 2019-08-31 10-32



    我无法访问Sybase的实例,但我会尝试猜测这种差异的主要原因是

    data type

    第二个论点

    HASHBYTES

    功能是:



    [1]适用于SQL Server的版本

    HASHBYTES




    @input指定包含要散列的数据的变量。 @input
    是varchar,nvarchar或varbinary。




    和[2]用于Sybase的s版本

    HASHBYTES




    expression [,expression …]是要散列的值。这个值可以
    是列名,变量,常量表达式或其组合
    这些产生单一价值。它不能是图像,文本,unitext,
    或行外Java数据类型。




    最重要的是,为了在两个DBMS服务器上获得相同的结果,我将源值转换为相同的数据类型(例如[n] varchar(4000))。




    1. `SELECT HASHBYTES(‘sha1’, CONVERT(VARCHAR(12), 10)).

    2. </code>


    只有HASBYTES.SQL2016 +有支持

    max

    数据类型。
    SQL Server:在内部,varbinary(8000)和varbinary(max)是diff。数据类型


  2. 1# نسر الصحراء | 2019-08-31 10-32



    在具有不同字节顺序的cpu上运行的MSSQL和Sybase可能存在的问题。



    考虑针对在Linux上运行的Sybase ASE执行以下操作(我在Solaris / x86上获得了与Sybase ASE相同的结果):




    1. select hashbytes(‘SHA1’, cast(10 as varbinary(8000)) ),hashbytes(‘sha1’,10 )
      select hashbytes(‘SHA1’, cast(10 as varbinary(8000)),using lsb),hashbytes(‘sha1’,10,using lsb)
      select hashbytes(‘SHA1’, cast(10 as varbinary(8000)),using msb),hashbytes(‘sha1’,10,using msb)
      select hashbytes(‘SHA1’, cast(10 as varbinary(8000)),using unicode_lsb),hashbytes(‘sha1’,10,using unicode_lsb)
      select hashbytes(‘SHA1’, cast(10 as varbinary(8000)),using unicode_msb),hashbytes(‘sha1’,10,using unicode_msb)
      go


    2. 0xeb408ddc4fa484e6befdf5954e56a2198c7a9fab 0xeb408ddc4fa484e6befdf5954e56a2198c7a9fab


    3. 0xeb408ddc4fa484e6befdf5954e56a2198c7a9fab 0xeb408ddc4fa484e6befdf5954e56a2198c7a9fab


    4. 0xeb408ddc4fa484e6befdf5954e56a2198c7a9fab 0xe864ece8888043b67277c8b2cefe96ad315fcca4


    5. 0xeb408ddc4fa484e6befdf5954e56a2198c7a9fab 0xeb408ddc4fa484e6befdf5954e56a2198c7a9fab


    6. 0xeb408ddc4fa484e6befdf5954e56a2198c7a9fab 0xe864ece8888043b67277c8b2cefe96ad315fcca4

    7. </code>


    如你所见,我得到了你提到的两个值; %CCA4匹配来自运行

    HASHBYTES
    </强>

    使用msb
    </强>
    要么

    使用unicode_msb
    </强>



    你的Sybase版本是什么?




    1. select @@version

    2. </code>

登录 后才能参与评论