日文環境下,SQL Server 為什麼會預設使用 Japanese_CI_AS?

| SQL | 2 Reads

在日本維護 SQL Server 時,常會看到 Japanese_CI_AS。Windows 的地區設定為 Japanese (Japan XJIS) 時,SQL Server 安裝程式預設採用 Japanese_CI_AS 作為執行個體的照合順序。 安裝時可以另行指定,因此要確認既有系統的設定,仍應查詢執行個體與資料庫。

安裝程式如何選擇預設值?

在 Windows 上,SQL Server 安裝程式會依作業系統的地區設定(OS locale)選擇預設的伺服器照合順序。若安裝時沿用預設值,以下兩種地區設定會得到不同結果。Microsoft Learn 的伺服器照合順序說明。

Windows 地區設定與 SQL Server 安裝預設值
Windows 地區設定 Windows LCID 預設照合順序
Japanese (Japan XJIS) 0x0411 Japanese_CI_AS
English (United States) 0x0409 SQL_Latin1_General_CP1_CI_AS

這兩筆對照可在 Microsoft Learn 的伺服器層級照合順序對照表查到。

Microsoft 也在 Analysis Services 全球化最佳實踐中,將 Japanese_CI_AS 列為日文最常用的照合順序。這項描述出自 Analysis Services 的使用情境。要判斷 Database Engine 安裝時的預設值,應查前面的地區設定對照表。

Japanese_CI_AS 代表什麼?

  • Japanese 表示採用日文的文字比較與排序規則。
  • CI(Case Insensitive)表示比較時不區分大小寫,例如 A 和 a 會被視為相等。
  • AS(Accent Sensitive)表示區分重音符號,例如 a 和 á 會被視為不同。

這個名稱沒有 _KS 和 _WS,所以比較時不區分對應的平假名與片假名,也不區分同一字元的全形與半形。若業務規則需要區分假名類型、字寬,或另外處理小假名,應用實際字串驗證比較結果。Microsoft Learn 的照合順序選項說明。

想看 _KS 和 _WS 如何影響字串比較,可參考站內的 Japanese_CI_AS 的 CI、AS、KS、WS 比較範例。

執行個體、資料庫和欄位可以各自設定

SQL Server 可在執行個體、資料庫、欄位和運算式四個層級設定照合順序。建立資料庫時若省略 COLLATE,資料庫會採用執行個體的預設值。即使執行個體使用 Japanese_CI_AS,也可以在建立資料庫時指定 Japanese_CI_AI,或針對個別文字欄位指定其他照合順序。Microsoft Learn 的 COLLATE 語法說明。

變更資料庫的預設照合順序時,既有文字欄位會保留原本的照合順序。 若要判斷某個欄位如何排序或比對,應確認該欄位的設定。Microsoft Learn 的資料庫照合順序說明。

用 T-SQL 確認目前設定

在 SQL Server Management Studio(SSMS)連線到目標執行個體,切換到要確認的資料庫,再執行下面兩個查詢。

SQL Server 執行個體

SELECT SERVERPROPERTY('Collation');

目前的資料庫

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Collation');

例如,第一個查詢傳回 Japanese_CI_AS,第二個傳回 Japanese_CI_AI,表示目前資料庫的預設值和執行個體不同。接手既有系統時,這兩個查詢能直接確認設定。

This article was last edited at