共用方式為


字元格式資料的儲存

字元格式的資料如何儲存在匯出的資料檔中,需視資料儲存在 MicrosoftSQL Server 資料表中的方式而定。有兩種主要的儲存模式,如下所示:

  • SQL Serverchar 資料

  • 轉換為 char 儲存的其他資料類型

SQL Server char 資料的儲存模式

SQL Serverchar 資料一定會以定義資料行的完整長度儲存在資料檔中。例如,定義為 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 個位元組儲存空格字元。