使用 text 與 image 資料
重要事項 |
---|
未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 改用 varchar(max)、nvarchar(max) 以及 varbinary(max) 資料類型。如需詳細資訊,請參閱<使用大數值資料類型>。 |
Microsoft SQL Server 將超過 8,000 個字元的字串與超過 8,000 個位元組的二進位資料儲存在名為 text 與 image 的特殊資料類型中。超過 4,000 個字元的 Unicode 字串以 ntext 資料類型儲存。
例如,如果必須將一個大型的客戶資訊文字檔 (.txt) 匯入 SQL Server 資料庫。這份資料應該儲存成一段資料,而不是併入資料表中的許多資料行。針對這個用途,您可以建立一個 text 資料類型的資料行。但是,如果必須儲存目前以 TIFF (Tagged Image File Format) 影像 (.tif) 儲存的公司標誌,而且每個影像各為 10 KB,就應該建立一個 image 資料類型的資料行。
如果文字資料是以 Unicode 格式儲存,請使用 ntext 資料類型。例如,針對國際客戶所建立的正式書信,有可能包含各種不同語言所使用的國際拼字和字元。在 ntext 資料行中儲存此資料。
每個 text 與 ntext 資料值都有定序 (Collation)。定序是定義諸如比較規則與是否區分大小寫或腔調字等屬性。text 值的定序也會指定字碼頁 (Code Page),以定義用來代表每個字元的位元模式。每個 ntext 值都會使用 Unicode 字碼頁,對所有定序而言都一樣。每個資料庫都有預設的定序。建立 text 或 ntext 資料行時,除非使用 COLLATE 子句指派特定定序,否則會為它們指派資料庫的預設定序。合併或比較兩個不同定序的 text 或 ntext 值時,由定序優先順序規則決定運算所用的定序。
image 資料中的資料儲存為位元字串,SQL Server 不會嘗試解譯這些資料。必須由應用程式來解譯 image 資料行中的資料。例如,應用程式可以使用 BMP、TIFF、GIF 或 JPEG 格式在 image 資料行中儲存資料。從 image 資料行讀取資料的應用程式必須能夠辨識資料的格式,並正確顯示出來。image 資料行的全部功能就是提供一個位置,用來存放構成影像資料值的位元串流。
在資料列中使用文字以儲存 text、ntext 與 image 值
一般而言,text、ntext 或 image 字串是儲存在資料列以外的大型 (最大 2GB) 字元或二進位字串。資料列僅包含一個 16 位元組的文字指標,它指到內部指標所構成的樹狀圖根節點,而這些內部指標則對應至儲存字串片段的分頁。
透過 SQL Server,您可以將中小型的 text、ntext 以及 image 值儲存在資料列中,以加快存取這些值的查詢速度。
當 text、ntext 或 image 字串儲存於資料列時,SQL Server 並不需存取一個個別的頁面或一組頁面來讀取或寫入字串。這使得讀取和寫入 text、ntext 或 image in-row 字串與讀取和寫入 varchar、nvarchar 或 varbinary 字串差不多一樣快。
若要在資料列中儲存 text、ntext 或 image 字串,您必須使用 sp_tableoption 預存程序來啟用 text in row 選項。
sp_tableoption N'MyTable', 'text in row', 'ON';
您也可以針對資料列中儲存的 text、ntext 以及 image 字串指定最大限制,從 24 到 7000 個位元組:
sp_tableoption N'MyTable', 'text in row', '1000';
若您指定 'ON',而非特定的限制,限制的預設值將為 256 個位元組。這個預設值可讓您獲得最多的效能優點;它夠大,能夠在資料列中儲存小字串和文字的根指標;它不至於過大,因而降低每頁的資料列數,而不會影響效能。
雖然一般而言,這個值不應該設低於 72,但也不應該設得太大,尤其是對於大部份陳述式都不參考 text、ntext, 以及 image 資料行的資料表,或是有多個 text、ntext 以及 image 資料行的資料表而言。
您也可以藉著將 sp_tableoption 的選項值指定成 'OFF' 或 0,來關閉該選項:
sp_tableoption N'MyTable', 'text in row', 'OFF';