我刚刚发现在 SQL Server 2012 MSDN 文档中针对 binary 和 varbinary 类型,他们在文章末尾提到了以下内容:
不保证任何数据类型和二进制数据类型之间的转换在 SQL Server 版本之间是相同的。
我注意到这在 2005、2008 和 2008 R2 的文章的先前版本中不存在。我在网上四处搜索,但没有找到任何确切的解释来满足我“为什么?”的问题。(这是我在这里的问题。)
我正在处理的项目需要将数据存储为 varbinary(max),但是基于这个小笔记,我担心如果我需要移动二进制数据然后将其转换到另一个 SQL Server 版本上,它将与原始数据不匹配数据转换为二进制,因此更深入地回答这个问题将有很大帮助。
谢谢!
Microsoft 保留更改内置数据类型(如
DATETIME
. 所以如果你做一个然后升级 SQL Server 甚至申请 SP
可能会得到一个与最初存储的日期不同的日期。
但是,如果您存储自己的二进制数据,这些数据是在 SQL Server 外部生成的(例如 pdf 文件),则该数据不会受到此类更改的影响。
顺便说一下,这并不新鲜。微软总是说他们可能会随时更改二进制表示形式。他们可能只是在新的 BOL 版本中让它变得更加明显。
话虽如此,微软仍然不太可能改变整数的二进制表示形式。但是,作为 CLR 类型实现的地理空间之类的东西很可能在版本之间发生变化。
根据 Paul 的评论:SQL Server 确实保证您可以在同一语句中将内置数据类型转换为二进制数据并返回。在将中间值存储在 tempdb 中时将其扩展到同一会话,但是我已经认为有风险 - 风险很小,但风险很大。将中间值存储在真实表中以在以后将其备份是绝对不能的。