【问题标题】:Convert ntext to varbinary(max)将 ntext 转换为 varbinary(max)
【发布时间】:2015-08-06 19:12:55
【问题描述】:

是否可以将SQL server 2000 R2 中的列值从ntext 转换为varbinary(max)

做一个我发现的解决方法,最初我需要从ntext 转换为nvarchar(),然后从nvarchar() 转换为varbinary(max)

【问题讨论】:

  • ntext 已弃用,无论如何您都不应该使用它。
  • 是的,如上所述,我希望该列位于 varbinary(max) 中。如何转换?
  • 为什么要在varbinary(max) 中使用它?用于存储长 unicode 字符串的 ntext 的替代品是 nvarchar(max)
  • 因为我希望数据以二进制格式存储。
  • 无论如何它都以二进制格式存储。将 nvarchar 转换为 varbinary 不会影响它的存储方式,只会使它更难使用。

标签: sql tsql sql-server-2008-r2


【解决方案1】:

不,这不是受支持的直接转换。

Data Type Conversion 主题 (image) 所示,您只能从 ntext 转换为其他字符串数据类型之一或转换为 XML。

但无论如何你都不需要这样做。

论据

因为我希望数据以二进制格式存储。

没有意义,因为它无论如何都不会影响物理存储。 见下文,实际存储的字节数是相同的。

CREATE TABLE T
(
A NVARCHAR(MAX),
B VARBINARY(MAX)
)

INSERT INTO T 
SELECT N'foobar',
       CAST(N'foobar' AS VARBINARY(MAX))

它只会影响字节的逻辑解释方式。存储为 varbinary 数据类型会使数据更难处理(需要转换回 nvarchar 以用作字符串)并且您的应用程序更加脆弱。 Conversions between any data type and the binary data types are not guaranteed to be the same between versions of SQL Server.

【讨论】:

  • 谢谢马丁。感谢您的支持和指导。图片回答了我的问题。
  • 多么奇怪的微软话:“任何数据类型和二进制数据类型之间的转换不保证在 SQL Server 版本之间是相同的。”这可能意味着支持的转换可能会发生变化,例如SS2014 支持从binarydatetime 的隐式转换,但下一个版本可能不支持。或者这可能意味着支持的转换可能会做一些不同的事情,例如在先前版本中返回 42 的转换可能在当前版本中返回 666。或两者。或者是其他东西。至少它是记录在案的。
  • @HABO 他们警告的是,他们可以在没有警告的情况下随意更改数据类型的内部二进制表示,我们不应该依赖它们保持固定。
猜你喜欢
  • 1970-01-01
  • 2010-10-13
  • 2022-01-06
  • 2021-05-30
  • 2010-09-08
  • 1970-01-01
  • 2018-01-25
  • 2022-01-19
  • 1970-01-01
相关资源
最近更新 更多