DataLength(Transact-SQL),为什么在测量xml文件时出现这种不规则性?

时间:2015-10-26 09:16:08

标签: sql-server tsql

我希望看到xml文件的大小(以字节为单位)。

该列已定义:

[XmlFile]       NVARCHAR (MAX) NOT NULL,

为了看大小,我做了:

SELECT
       ...
       DATALENGTH(XmlFile) As SizeInBytes

我做了一个简单的测试:

XmlFile = 'ciao', SizeInBytes (sql): 8, Saving the file in my desktop: 4bytes
XmlFile = '', SizeInBytes (sql): 0, Saving the file in my desktop: 0bytes
XmlFile = 'TestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest', SizeInBytes (sql): 176, Saving the file in my desktop: 88bytes

为什么我有这些违规行为?我做错了吗?如何确定结果的正确性?

2 个答案:

答案 0 :(得分:1)

因为您的数据类型为NVARCHAR

DATALENGTH(NVARCHAR) = 2*DATALENGTH(VARCHAR)

您可以查看以下代码:

SELECT DATALENGTH('c') -- varchar
SELECT DATALENGTH(N'c') -- nvarchar

答案 1 :(得分:0)

NVarChar以UTF-16方式存储字符串,这意味着每个字符每个占用2个字节。

DATALENGTH将为您提供字段占用的字节数。

您的文件长度与从SQL Server获得的文件长度不同,因为文件的编码不同(可能是UTF-8或ANSI)。如果将文件保存中的编码更改为UTF-16,则长度相同。