xml列如何存储在SQL Server 2008中?

Nic*_*uet 8 xml sql-server sql-server-2008 xml-column

我尝试了解SQL Server 2008如何存储xml列以尝试估计产品中的表大小.

我正在使用DATALENGTH(xml_column)一些测试,结果令人不安:

Xml document length | Datalength | Bytes per character
175                 | 366        | 2.09
15                  | 38         | 2.53
314                 | 414        | 1.31
Run Code Online (Sandbox Code Playgroud)

显然,xml列类型并不是nvarchar(max)伪装的,因为我已经在某处读过了.

它可能被压缩并存储为二进制,但无法找到任何地方.

有人可以解释一下xml列是如何存储在SQL Server 2008中的?

Joh*_*ers 7

XML列以"紧凑二进制格式"存储.

我怀疑微软会不会给你更多细节.

  • 重要的是要知道它是一种"标记化"格式,例如Microsoft保证回馈**语义相同的XML - 但它们不保证XML的文本表示(例如MS将切换`<empty> </ empty >从他们的XML列返回时``到`<empty />`,据我所知,没有办法控制这种行为.不要依赖从SQL Server中获取文本相同的XML .... (4认同)

Nic*_*uet 5

正如rene所指出的,SQL Server 2008使用MS-BINXML(一种紧凑的二进制格式)来存储xml列的内容.