sql-server - 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
解决方案
Checksum 和 binary_checksum 都受服务器的区域设置和区分大小写设置的影响。varbinary 被转换为字符串,然后应用校验和。服务器之间的设置更有可能不同。
MSDN - BINARY_CHECKSUM 对相同的值给出不同的结果
我认为这也是 CHECKSUM 的情况......也许这样的事情在两台服务器上都能正常工作:
SELECT CHECKSUM('AA' COLLATE Latin1_General_CI_AS)
编辑:我的回答不正确。似乎我通过包含 COLLATE 的建议没有达到我预期的效果。我会尽快删除我的答案。
推荐阅读
- bash - 如何将自定义字符串附加到错误输出并将其重定向到文件
- google-calendar-api - 无法使用服务帐户访问从 API 创建的新 Google 日历
- swift - 如何以简单的方式从 UITableView(或单元格)保存 PDF(和打印)?
- c# - 如何在 C# 代码中更改 Fontawesome.wpf 图标
- scikit-learn - Sklearn 投票集成与使用不同特征的模型并使用 k 折交叉验证进行测试
- python - Python Twisted Scrapy AttributeError:“DefaultOpenSSLContextFactory”对象没有属性“privateKey”
- google-maps - Puppeteer:使用内置 firefox 从 2.1 更新到 3.1 后无法访问 iframe 元素
- python - 动态搜索:Pandas 数据框查询
- c# - c# 文化信息的日期格式问题
- c - 如何将数据从结构或联合复制到没有空字符的缓冲区数组?