SQL Server xml 与 nvarchar 字段存 XML 时,如何对待 CDATA 数据

作者:vkvi 来源:ITPOW(原创) 日期:2023-5-18

SQL Server 的 xml 类型字段和 nvarchar 类型字段,都可以存 XML 结构的文本,存的时候,使用单引号将 XML 结构的文本引起来,就像存字符串一样。

取的时候,也是像取字符串一样。

但是 xml 类型字段多一个功能,就是可以按节点进行索引,并 select、where 某个节点数据,这就比较霸道了,请参见:SQL Server 2008 数据类型-xml 字段类型如何用?

本文主要是研究一下,如何对待 <![CDATA[ ]]> 数据。

xml 会干掉 CDATA 标记,但 nvarchar 不会。

比如:

<item><![CDATA[itpow]]></item>

会按以下存储:

<item>itpow</item>

而 nvarchar 由于是当作纯的字符串对待,所以不会有任何变动,哪怕是错误的 XML,它也是照存。

那是不是说 xml 只是粗暴地去掉 CDATA 呢?

不是,它是校验之后,认为能去才去。

比如,我们来一个扰乱的数据:

<item><![CDATA[]]>]]></item>

我们内容就是 ]]>,跟 CDATA 的尾标记相同,此时插入数据库时会报错

而 nvarchar 则是照常存储,只是取出来解析、使用 XML 的时候,应用程序才会发现,这 XML 结构不对呀。

xml 还会 HtmlEncode

比如:

<item><![CDATA[&]]></item>

实际存储为:

<item>&amp;</item>

总结

SQL Server xml 与 nvarchar 字段存 XML 时,如何对待 CDATA 数据

相关文章