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>&</item>
总结