2007年11月16日 星期五

SQL Server 定序設定

轉載網址
SQL2000的設定
SQL2005的設定

SQL2000
定序的觀念
早期的 SQL Server 6.5 尚無支援 Unicode 的字元,透過字碼頁決定所支援的語系處理功能,每一個 SQL Server 6.5 執行個體對應一個字碼頁,例如選擇 CP950 時可以支援中文。SQL Server 7.0 每一個 SQL Server 執行個體支援一個 Unicode 的定序與 Non-Unicode 的定序,其中 Non-Unicode 包含字碼頁與排序順序方式。SQL Server 2000 將字碼頁與定序合成單一設定,可以在執行個體安裝時候選定,也可以在資料庫建立時選定,更可在資料表建立時候個別欄位獨立指定,或是在T-SQL運算式中使用來決定字串的運算方式,例如排列方式、字元大小、腔調差異與全半形比較等。英語語系可以透過定序決定字母的排序、大小寫區隔,非英語語系決定多樣化的資料排序,例如按照筆畫、注音、字元全半形、假名等,定序更攸關索引建立時索引頁的資料排序方式。
SQL Server 2000 中有兩種定序類型可以選擇:Windows 定序和 SQL 定序。Windows 定序根據與 Windows 地區設定相關的規則,來定義排序規則。要進行這項工作,SQL Server 會複製 Windows Server 的排序規則,並將它們套用到對應的 Windows 定序中,透過這個方法,SQL Server 中給定 Windows 2000 定序的字串比較作業,會與執行相同定序之 Windows 版的比較作業相容。但是,因為 Windows Server 2000 之後的 Windows 版本,如 Windows XP 和 Windows Server 2003 使用不同的排序資料表,因此安裝在這些 OS 上 SQL Server 的 Windows 定序,可能會顯示與主機端 OS 不同的排序方式。SQL 定序與 Windows 地區設定無關,提供的目的是與 SQL Server 早期版本的排序順序相容。
透過內建系統函數 COLLATIONPROPERTY 可以判斷出每一個定序的支援字碼頁與地區編號,如果所找出的字碼頁若為0時,表示該定序僅支援 Unicode 的字串處理方式。下圖展示透過內建函數判斷定序所支援的字碼頁與地區編號。


四個定序運用的範圍
SQL Server 2000 的定序的使用方式非常具有彈性,包含以下四個範圍:

  • 系統安裝( Server Collation )
    透過 SELECT SERVERPROPERTY('collation')查詢出來執行個體所選定的定序設定,如果當執行個體安裝完畢之後,需要更改執行個體的定序時,必須透過公用程式 RebuildM.exe,才可以重新修改執行個體的定序設定。內定該公用程式所在位置為 C:\Program Files\Microsoft SQL Server\80\Tools\Binn\ rebuildm.exe,作業設定如下。


    啟動 Rebuildm.exe 程式畫面

    選擇定序的設定畫面

  • 資料庫建立 (Database Collation)

    第二階層設定定序的層級是資料庫建立時可以選定,當建立資料庫時內定使用執行個體的定序設定,若需要特殊定序則必須在建立資料庫時,透過下列畫面選定。當完成資料庫建立後,可以透過 SELECT DATABASEPROPERTYEX(‘DBName, ‘collation’) 查詢出來所屬的資料庫的定序設定值。一般情況在 Enterprise Manager 的畫面時,是無法直接修改既定的資料庫定序值,但可以透過 T-SQL 的指定進行資料庫定序的更改,修改指令如下:


    ALTER DATABASE Northwind COLLATE Chinese_Taiwan_Bin

    一般建立完成後的資料庫定序,無法直接從 Enterprise Manager 畫面修改


  • 資料表欄位 (Column Collation)
    第三種層級的定序設定就是在資料表建立時,個別欄位中指定不同的定序,透過這樣的彈性設定可以讓同一個資料表中在一般的 char/varchar/text 資料型態,支援不同語系的字串資料。例如一個跨國企業的訂單彙總表,可以選擇第一個欄位存放簡體中文資料、第二欄位存放繁體中文資料,第三個欄位存放日語資料,透過這樣的彈性設定可以讓資料彙總更具彈性與靈活。下圖可以展示出不同資料欄位定序與多國語系資料設定的技巧。


    第一個欄位屬於 Chinese_PRC_Stroke_CI_AS 的定序設定
    第二個欄位屬於 Chinese_Taiwan_Stroke_CI_AS 的定序設定
    第三個欄位屬於 Japanese_CI_AS 的定序設定

    透過 Query Analyzer 可以直接瀏覽不同定序欄位的資料
  • 運算式 ( Expression Collation)
    利用 Collate 關鍵字可以在 T-SQL 所撰寫的 Script 中指定定序的使用,例如透過定序指定原先不分字元大小寫的字串,轉換成區分成字元的大小寫;也可以透過定序指定中文字的排序方式,可以依照注音符號或是按照筆畫進行排序等。以下的範例將展示如何透過定序在運算式中改變資料的排序方式,原先的資料如果是一般的 Chinese_Taiwan_Stroke_CI_AS 時,資料輸出是按照比較次序排列,如以下畫面

    若是透過定序在排序時改變成按照注音符號進行排序,則出來的結果將有明顯的不同,將依照ㄅㄆㄇㄈ等進行字的排序,如下圖所示



SQL2005

變更伺服器定序

變更 SQL Server 2005 執行個體的預設定序是相當複雜的作業,需要執行下列步驟:

  • 確定已備妥重新建立使用者資料庫以及所有內含物件所需的所有資訊或指令碼。

  • 使用如大量複製這類工具來匯出所有資料。

  • 卸除所有使用者資料庫。

  • 重建 master 資料庫,以使用 setup 命令的 SQLCOLLATION 屬性來指定新定序。例如:
    start /wait setup.exe /qb INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=test SQLCOLLATION=SQL_Latin1_General_CP1_CI_AI
    如需有關重建 master 資料庫的詳細資訊,請參閱<如何:重建 SQL Server 2005 的 master 資料庫>。

  • 建立所有資料庫以及所有內含物件。

  • 匯入所有資料。


調整SQL定序 實例

Northwindmaster 調整定序為 Chinese_Taiwan_Stroke_CI_AS

查詢 Northwind 和 master 的定序
SELECT DATABASEPROPERTYEX('master', 'Collation')

SELECT DATABASEPROPERTYEX('Northwind', 'Collation')

查詢 Northwind 和 master 的定序
ALTER DATABASE Northwind COLLATE Chinese_Taiwan_Stroke_CI_AS
ALTER DATABASE master COLLATE Chinese_Taiwan_Stroke_CI_AS --無法 改變 資料庫 'master',因為它是系統 資料庫。



SQL2000 系統資料庫 master 的定序調整
執行:C:\Program Files\Microsoft SQL Server\80\Tools\Binn\rebuildm.exe
進行管理介面調整



SQL2005 系統資料庫 master 的定序調整
執行:cmd 開啟DOS 視窗
C:\Documents and Settings\Administrator>x: --變更到CD目錄下
X:>start /wait setup.exe /qb INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=xxx SQLCOLLATION=Chinese_Taiwan_Stroke_CI_AS -- 依提示,逐步完成設定

沒有留言: