我正在編寫與第三方應用程序交互的應用程序。SQL Server:可變長度XML存儲
第三方應用程序將傳遞我的應用程序幾個原始XML請求。我想將這些請求中的每一個都保存在我的數據庫的通訊記錄中。
什麼是最有效的方式來存儲這個可變長度的數據? VARCHAR(MAX)
? NVARCHAR(MAX)
?
如果其中一個比另一個更好(或者我缺少另一個選項),請解釋它爲什麼是最佳選擇。
我正在編寫與第三方應用程序交互的應用程序。SQL Server:可變長度XML存儲
第三方應用程序將傳遞我的應用程序幾個原始XML請求。我想將這些請求中的每一個都保存在我的數據庫的通訊記錄中。
什麼是最有效的方式來存儲這個可變長度的數據? VARCHAR(MAX)
? NVARCHAR(MAX)
?
如果其中一個比另一個更好(或者我缺少另一個選項),請解釋它爲什麼是最佳選擇。
在處理XML時,XML接縫是顯而易見的選擇數據類型,但並非總是如此。
查看Robert Sheldon的這篇文章。 Working with the XML Data Type in SQL
在某些情況下,你不應該使用XML數據類型,而是使用大對象存儲VARCHAR(MAX),NVARCHAR(MAX),或VARBINARY(MAX)。例如,如果您只是將XML文檔存儲在數據庫中,並將這些文檔作爲一個整體進行檢索和更新 - 也就是說,如果您從不需要查詢或修改各個XML組件 - 則應考慮使用其中一種大對象數據類型。對於想要以原始格式保存的XML文件(例如法律文檔)也是如此。如果您需要保留精確的文本副本,請使用大型對象存儲。
由於您使用的是SQL Server 2K5,因此存儲XML數據的最佳數據類型爲xml
。
這提供瞭解析和模式驗證功能。如果需要,它也可以讓你在稍後的index the XML data。
我已經使用了XML數據類型爲這種類型的事情MSDN link - XML DataType 2005
本地和允許你做一些正常的角度支架事情的實際數據。
更重要的是,我沒有轉換或混淆實際數據,並將實際的XML引入了細微的錯誤。
如果您想對XML進行任何處理,就像渲染它一樣。
缺點是您必須瞭解該列是XML數據,您需要在上游應用程序中對其進行編碼。
添加到呸的回答是:
XML意味着unicode的,如果你選擇非Unicode存儲則數據丟失是幾乎可以肯定的
合適的,如果你只是要記錄的XML數據
僅當您有固定的xml架構(XSD)時永遠不會更改。 (據我所知,ALTER XML SCHEMA COLLECTION不支持更新或刪除XML實體)