以字符格式存储数据

字符格式数据在导出的数据文件中的存储方式取决于这些数据原来在 Microsoft SQL Server 表中的存储方式。有两种重要的存储模式,如下所示:

  • SQL Server char 数据

  • 转换为 char 存储的其他数据类型

SQL Server char 数据的存储模式

SQL Server char 数据始终以已定义列的全长存储在数据文件中。例如,在数据文件中定义为 char(10) 的列将始终占用 10 个字符,无论存储在该列中的数据长度如何。如果 char 数据的长度小于字段长度,则向数据追加空格作为填充;有关详细信息,请参阅 SET ANSI_PADDING (Transact-SQL)。但是,对于 varchar 类型,将仅存储实际数量的字符,除非选择前缀或终止符。

其他转换为 char 数据的数据类型的存储模式

在数据文件中,以字符格式存储的非字符数据所占用的存储空间量取决于字段长度、前缀长度和终止符的组合,如下所示:

  • 如果前缀长度为 0 并且无终止符,则该字段将被视为具有固定的长度,该固定长度由字段长度值指定。如果指定前缀长度为 0 并且无终止符,则 bcp 实用工具将分配在字段长度提示中显示的最大空间量,因为该值是所述的数据类型可能需要的最大空间。该方法可以确定一个字段的结束位置和下一个字段的开始位置。

  • 如果指定前缀长度为 0 并且指定了终止符,则字段长度值将被忽略。字段使用的存储空间是数据加上任何终止符的长度。

    重要说明重要提示

    只有在非 XML 格式化文件中才能指定前缀和终止符。

  • 如果前缀长度为 1、2 或 4,则字段长度值将被忽略。字段使用的空间是其长度加上字段前缀的长度再加上所有终止符的总长度。

在前面列出的所有情况中,您都可以创建一个数据文件以便以后重新加载到 SQL Server(可以使存储空间保持最小)。若要使存储空间最小,请使用长度前缀字符、默认文件存储类型和默认字段长度。

示例

下列示例说明了数据以 char 格式存储时,字段长度、前缀长度和终止符之间的相互关系。如果存在前缀长度值,它将以 P 表示。如果存在终止符,它将以 T 表示。省略号 (...) 表示每个字段都重复该模式。

SQL Server char 数据的存储模式示例:

注意注意

char 数据始终以全长方式存储(即以一个或多个空格作为填充)。

表架构为 t1 (c1 char(8))。示例采用 5 个字符的值(表示为 Hello),它存储在长度为 8 个字符的字段中。在示例的各个数据字段中,必须始终在 5 个字符的值 Hello 后面追加三个空格。追加的空格以三个点 (∙∙∙) 表示。

 

前缀长度 = 0

前缀长度 = 1、2 或 4

无终止符:

Hello∙∙∙Hello∙∙∙...

PHello∙∙∙PHello∙∙∙...

有终止符:

Hello∙∙∙THello∙∙∙T...

PHello∙∙∙TPHello∙∙∙T...

注意注意
此示例仅适用于非 XML 格式化文件。

非字符数据类型转换为 char 存储时的存储模式示例

表架构为 t1 (c1 int),每行具有整数值 999。

注意注意

对于转换为 char 存储且前缀长度为 1、2 或 4 或者具有字段终止符的数据而言,不必在数据值后面追加空格。

 

前缀长度 = 0

前缀长度 = 1、2 或 4

无终止符:

999∙∙999∙∙...

P999P999...

有终止符:

999T999T...

P999TP999T...

注意注意
此示例仅适用于非 XML 格式化文件。
注意注意

如果您未指定前缀长度或终止符,则整数值将使用 12 个字节存储,其中后 9 个字节用于存储空格字符。