定序用語
若要對 SQL Server 2005 的語言支援做最佳利用,您應該瞭解這個主題所定義的各個詞彙。
詞彙
- 字碼頁
- 定序
- 資料類型
- 全球化
- 地區設定
- 讀取順序
- 排序順序
- Unicode
字碼頁
字碼頁是給定的指令碼的已排序字元集,其中每一個字元與數字索引或字碼指標值相關聯。Microsoft Windows 字碼頁通常稱為*「字元集」*或 charset。字碼頁是用來提供不同 Windows 地區設定所使用的字元集和鍵盤配置的支援。
相關主題:設定用戶端字碼頁
回到頂端
定序
定序指定位元模式,代表資料集的每一個字元。定序也決定排序和比較資料的規則。SQL Server 2005 支援在單一資料庫中以不同定序儲存物件—SQL Server 資料庫中的每一個資料行有它自己的定序。對於非 Unicode 資料行,定序設定則指定資料的字碼頁以及可代表的字元。可在 Unicode 資料行之間嚴謹而且緊密地移動資料。非 Unicode 資料行之間移動的資料不能嚴謹而且緊密地移動,而且必須由目前的字碼頁加以轉換。
當 Transact-SQL 陳述式在各有不同定序設定的不同資料庫內容中執行時,陳述式的結果可能不同。最佳作法包括對組織使用標準化定序 (如果可能的話)。對組織的所有系統使用標準定序設定,就不需要在每一個字元或 Unicode 運算式中明確指定定序。如果您必須使用有不同定序和字碼頁設定的物件,則在撰寫查詢程式碼時必須考量定序優先順序的規則。如需詳細資訊,請參閱<定序優先順序 (Transact-SQL)>。
定序的特性是區分語言、區分大小寫、區分腔調字、區分假名和區分全半形。
SQL Server 2005 定序包括下列群組:
- Windows 定序
Windows 定序會依據相關聯的 Windows 地區設定,來定義儲存字元資料的規則。如果是 Windows 定序,非 Unicode 資料的比較是使用與 Unicode 資料相同的演算法來實作。基本 Windows 定序規則指定套用字典排序時使用的字母或語言,以及用來儲存非 Unicode 字元資料的字碼頁。Unicode 和非 Unicode 排序都與特定 Windows 版本中的字串比較相容。這提供 SQL Server 內各資料類型的一致性,也提供開發人員在其應用程式中使用 SQL Server 所用的相同規則來排序字串的能力;亦即,呼叫 Microsoft Win32 API 的 CompareStringW 函數。如需詳細資訊,請參閱<安裝程式中的定序設定>。
二進位定序
二進位定序是依據地區設定和資料類型所定義的編碼值順序來排序資料。SQL Server 中的二進位定序會定義要使用的語言地區設定和 ANSI 字碼頁,並強制使用二進位排序順序。由於其相對簡化性,二進位定序在改善應用程式效能方面很有幫助。如果是非 Unicode 資料類型,資料比較是依據 ANSI 字碼頁中所定義的字碼指標。如果是 Unicode 資料類型,資料比較則是依據 Unicode 字碼指標。如果是 Unicode 資料類型的二進位定序,在資料排序時不會考量地區設定。例如,Latin_1_General_BIN 和 Japanese_BIN 用於 Unicode 資料時會產生相同的排序結果。SQL Server 的舊二進位定序對 Unicode 資料的字碼指標對字碼指標比較不完整,在舊版 SQL Server 的二進位定序中,是以 WCHAR 比較第一個字元,之後再逐一比較位元組。為了與舊版相容,現有的二進位定序語意不變。
在這一版的 SQL Server 中,二進位定序包括一組新的純字碼指標比較定序。客戶可選擇移轉到新的二進位定序以得利於真正字碼指標比較的好處,並應該利用新的二進位定序以開發新的應用程式。新的 BIN2 後置詞識別實作新字碼指標定序語意的定序名稱。此外,也加入新的比較旗標來對應至新二進位排序的 BIN2。如需詳細資訊,請參閱<使用二進位定序>。
SQL Server 定序
SQL Server 定序提供與 SQL Server 較早版本的排序順序相容性。對於非 Unicode 資料,SQL Server 定序是以傳統 SQL Server 排序順序為基礎—例如,char 和 varchar 資料類型—由 SQL Server 定義。非 Unicode 資料的字典排序規則與 Windows 作業系統提供的任何排序常式不相容,但 Unicode 資料的排序與 Windows 排序規則的特定版本相容。因為 SQL Server 定序對非 Unicode 和 Unicode 資料使用不同的比較規則,所以,您會看到相同資料的比較有不同的結果,這要看基礎的資料類型而定。如需詳細資訊,請參閱<使用 SQL 定序>。附註: 當您升級 SQL Server 的執行個體時,可基於與 SQL Server 現有的執行個體的相容性而指定 SQL Server 定序。因為 SQL Server 的執行個體的預設定序是在安裝期間定義的,所以,在下列情況下,一定要小心指定定序設定: - 在某些方面,應用程式碼視先前的 SQL Server 定序行為而定。
- 您將搭配現有的 SQL Server 6.5 或 SQL Server 7.0 安裝來使用 SQL Server 2005 複寫。
- 您必須儲存反映多國語言的字元資料。
SQL Server 2005 支援在 SQL Server 2005 執行個體的下列層級設定定序:
伺服器層級定序
SQL Server 執行個體的預設定序是在安裝期間設定的。執行個體的預設定序也變成系統資料庫的預設定序:master、model、tempdb、msdb 和 distribution。當定序指派給資料行或資料庫以外的任何物件時,除非卸除及重新建立該物件,否則您不能變更此定序。若不變更 SQL Server 執行個體的預設定序,您可以在建立新資料庫或資料庫資料行時指定定序。若要查詢 SQL Server 執行個體的伺服器定序,請使用下列 Transact-SQL SERVERPROPERTY 函數:
SELECT CONVERT (varchar, SERVERPROPERTY('collation'))
若要查詢伺服器的所有可用定序,請使用下列 fn_helpcollations() 內建函數:
SELECT * from ::fn_helpcollations()
資料庫層級定序
建立資料庫時,CREATE DATABASE 陳述式的 COLLATE 子句可用來指定資料庫的預設定序。如果在資料庫建立期間未指定定序,則會指派 model 資料庫的預設定序給這個資料庫。model 資料庫的預設定序與 SQL Server 執行個體的預設定序相同。使用者資料庫的定序可以使用類似下面的 ALTER DATABASE 陳述式來變更:
ALTER DATABASE myDB COLLATE Greek_CS_AI
資料庫的目前定序可使用類似下面的陳述式來擷取:
SELECT CONVERT (varchar, DATABASEPROPERTYEX('database_name','collation'))
附註: 改變資料庫層級定序不影響使用者、資料表或資料行層級的定序。
資料行層級定序
建立資料表時,每一個字元字串資料行的定序可使用 CREATE TABLE 陳述式的 COLLATE 子句來指定。如果在資料表建立期間未指定定序,則會指派資料庫的預設定序給資料行。資料行的定序可以使用類似下面的 ALTER TABLE 陳述式來變更:
ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR(10) COLLATE Greek_CS_AI
運算式層級定序
運算式層級定序是在執行陳述式時設定的,它們影響傳回結果集的方式。這樣可排序結果,因此 ORDER BY 子句可以是語言特定的子句。使用類似下面的 COLLATE 子句來實作運算式層級定序:SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI
回到頂端
資料類型
資料類型是一種定義,指定值範圍、可對值執行的作業和值儲存在電腦記憶體的方式。定義資料類型可讓 SQL Server 以可預測的方式來管理資料。非 Unicode 字元資料類型為 char、varchar 和 text。Unicode 資料類型使用 Unicode 字元表示法;它們是 nchar、nvarchar 和 ntext。尤其當您儲存能反映多種語言的字元資料時,建議您在應用程式中使用 Unicode 資料類型。
相關主題:資料類型 (Database Engine)、資料類型 (Transact-SQL)、Integration Services 資料類型
回到頂端
全球化
全球化是開發軟體應用程式的過程,其功能和程式碼設計將多種口語和地區設定納入考量。全球化應用程式設計為資料的輸入、處理、顯示和輸出容納多個地區設定和 Unicode 支援的語言。
相關主題:SQL Server 的國際化考量
回到頂端
地區設定
地區設定是與地方或文化相關聯的一組資訊—口語的名稱和識別碼,用來撰寫語言的指令碼和文化習慣。SQL Server 2005 支援 Windows XP 所支援的全部 135 個地區設定。其中有 5 個中文地區設定 (香港特別行政區、澳門特別行政區、中華人民共和國、新加坡和台灣)、13 個英文地區設定 (澳大利亞、貝里斯、加拿大、加勒比海、愛爾蘭、牙買加、紐西蘭、菲律賓、南非、千里達、英國、美國和辛巴威) 和 6 個法文地區設定 (比利時、加拿大、法國、盧森堡、摩納哥和瑞士)。
下表說明 Windows 所支援的 4 個共同地區設定之間的幾項差異。
地區設定 | 英文 (美國) | 法文 (法國) | 日文 | 阿拉伯聯合大公國 |
---|---|---|---|---|
國家/地區 |
美國 |
法國 |
日本 |
阿拉伯聯合大公國 |
語言 |
英文 |
法文 |
日文 |
阿拉伯文 |
撰寫的指令碼 |
拉丁文 |
拉丁文 |
假名,漢字 |
阿拉伯文 |
讀取順序 |
由左至右 |
由左至右 |
由左至右 |
由右至左 |
Windows 定義的字碼頁 |
1252 |
1252 |
932 |
1256 |
時間格式 |
1:00 pm |
13:00 |
13:00 |
1:00 p |
日曆 |
西曆 |
西曆 |
西曆 (當地語系化) |
西曆 (當地語系化) |
預設紙張大小 |
U.S. Letter |
A4 |
A4 |
A4 |
十進位分隔符號 |
. |
, |
. |
, |
清單分隔符號 |
, |
; |
, |
; |
千位分隔符號 |
, |
空格 |
, |
, |
回到頂端
讀取順序
讀取順序是已排序的文字順序的整體方向,與字的順序有關,而不是所輸入字元的順序。例如,使用阿拉伯文作為鍵盤語言,表示新字元的流向一律由右至左。若拉丁文是鍵盤語言,則新字元流向是由左至右。
回到頂端
排序順序
排序順序指定資料值的排序方式,會影響資料比較的結果。資料的排序是透過定序來完成,可利用索引來最佳化排序。
相關主題:Windows 定序排序樣式、索引
回到頂端
Unicode
Unicode 是以雙位元組而非單位元組來代表語言的字元,讓單一 Unicode 字元集能夠代表幾乎全世界的所有書寫語言。Unicode 是由 Unicode Consortium 開發、維護和提升,它是一個非營利性的電腦工業組織。如需詳細資訊,請參閱<Unicode Consortium 網站>。
如果您儲存能夠反映多種語言的字元資料,一定要使用 Unicode 資料類型 (nchar、nvarchar 和 ntext) 而不要使用非 Unicode 資料類型 (char、varchar 和 text)。透過使用 Unicode,您會發現效能獲得明顯改善,因為所需要的字碼頁轉換減少。關聯於非 Unicode 資料類型受到很大的限制,因為非 Unicode 電腦受限於使用單一字碼頁。若要完整評估與使用 Unicode 或非 Unicode 資料類型有關的議題,您必須測試自己的狀況,來衡量特定環境的效能差異。至少,要將網站定序標準化,並儘量部署 Unicode 伺服器和用戶端。
在大部份情況下,SQL Server 執行個體將與其他伺服器或用戶端互動,而執行個體可使用多重資料存取標準。SQL Server 用戶端是兩個主要類型之一:
- Unicode 用戶端,使用 OLE DB 和 Open Database Connectivity (ODBC) 3.7 版或更新版本。
- 非 Unicode 用戶端,使用 DB-Library 和 ODBC 3.6 版或更早版本。
下表顯示使用多國語言資料與 Unicode 和非 Unicode 伺服器不同組合之考量。
伺服器 | 用戶端 | 好處或限制 |
---|---|---|
Unicode |
Unicode |
理想組態,因為 Unicode 資料將在整個系統中使用。這個狀況提供最佳效能並防止所擷取資料遭到損毀。Microsoft ActiveX Data Objects (ADO)、OLE DB 和 ODBC 3.7 版或更新版本的案例。 |
Unicode |
非 Unicode |
在這個案例中,資料儲存不是問題,但當您將資料移到用戶端電腦時,會受到限制。至少,必須使用非 Unicode 用戶端上的字碼頁來轉換 Unicode 資料。 |
非 Unicode |
Unicode |
這不是使用多國語言資料的理想組態。您不能將 Unicode 資料寫至非 Unicode 伺服器。當資料傳送到在此伺服器的字碼頁以外的伺服器時,就可能發生問題。 |
非 Unicode |
非 Unicode |
這是多國語言資料的限制狀況。您受限於使用單一字碼頁。理想組態是含有 Unicode 用戶端的 Unicode 伺服器。 |
相關主題:Unicode 基本概念
回到頂端