【问题标题】:SQL Server: variable length XML storageSQL Server:可变长度 XML 存储
【发布时间】:2011-12-09 13:22:30
【问题描述】:
我正在编写一个与第三方应用程序交互的应用程序。
第三方应用程序将向我的应用程序传递几个原始 XML 请求。我想将这些请求中的每一个都保存在我的数据库中的通信日志中。
存储这种可变长度数据的最有效方法是什么? VARCHAR(MAX)? NVARCHAR(MAX)?
如果一个比另一个更好(或者我缺少另一个选项),请解释为什么它是最佳选择。
【问题讨论】:
标签:
c#
sql
web-services
sql-server-2005
【解决方案2】:
在处理 XML 时,XML 接缝显然是首选的数据类型,但并非总是如此。
看看罗伯特·谢尔顿的这篇文章。 Working with the XML Data Type in SQL
在某些情况下,您不应使用 XML 数据类型,而应使用大型对象存储 — VARCHAR(MAX)、NVARCHAR(MAX) 或 VARBINARY(MAX)。例如,如果您只是将 XML 文档存储在数据库中,然后将这些文档作为一个整体进行检索和更新(也就是说,如果您从不需要查询或修改单个 XML 组件),您应该考虑使用一种大对象数据类型.对于要以原始形式保存的 XML 文件(例如法律文档)也是如此。如果您需要保留精确的文本副本,请使用大型对象存储。
【解决方案3】:
我已经为这种类型的东西使用了 XML 数据类型MSDN link - XML DataType 2005
Native 并允许您对实际数据执行一些正常的尖括号操作。
最大的优点是我不会转换或弄乱实际数据,而是在实际 XML 中引入细微的错误。
如果你想对 XML 做任何事情,比如渲染它。
缺点是您必须知道该列是 XML 数据,并且您需要在上游应用程序中对其进行编码。
【解决方案4】:
添加到 Yuck 的答案:
XML 表示 Unicode,如果您选择非 Unicode 存储,则几乎可以肯定数据丢失
如果你只想记录 XML 数据是合适的
如果您想稍后查询 XML 内容
- 使用 XML SCHEMA COLLECTION 键入 XML
仅当您有一个永远不会改变的固定 xml 架构 (XSD) 时。 (据我了解,ALTER XML SCHEMA COLLECTION 不支持更新或删除 XML 实体)