首页 > 解决方案 > sql server 2008 和 2016 中“-”的校验和值不同,因此无法比较修改后的数据

问题描述

2008 年“-”的校验和值为 45,2016 年为 0 因此,当我们计算一个值的校验和时,例如“AS”和“AS-”,这两个值的校验和在 sql server 2008 和 2016 中是不同的,校验和值相同。我想要不同的值,如 sql server 2008 来执行一些操作

在 sql 2008-

select checksum('AA')   --o/p- 2158
select checksum('AA-')  --o/p- 34509

2016-

select checksum('AA')   --o/p- 34472462
select checksum('AA-')  --o/p- 34472462

标签: sql-server

解决方案


Checksum 和 binary_checksum 都受服务器的区域设置和区分大小写设置的影响。varbinary 被转换为字符串,然后应用校验和。服务器之间的设置更有可能不同。

MSDN - BINARY_CHECKSUM 对相同的值给出不同的结果

我认为这也是 CHECKSUM 的情况......也许这样的事情在两台服务器上都能正常工作:

SELECT CHECKSUM('AA' COLLATE Latin1_General_CI_AS)

编辑:我的回答不正确。似乎我通过包含 COLLATE 的建议没有达到我预期的效果。我会尽快删除我的答案。


推荐阅读