日文環境下,SQL Server 為什麼會預設使用 Japanese_CI_AS?
Copyright Notice: This article is an original work licensed under the CC 4.0 BY-NC-ND license.
If you wish to repost this article, please include the original source link and this copyright notice.
Source link: https://v2know.com/article/1473
在日本維護 SQL Server 時,常會看到 Japanese_CI_AS。Windows 的地區設定為 Japanese (Japan XJIS) 時,SQL Server 安裝程式預設採用 Japanese_CI_AS 作為執行個體的照合順序。 安裝時可以另行指定,因此要確認既有系統的設定,仍應查詢執行個體與資料庫。
安裝程式如何選擇預設值?
在 Windows 上,SQL Server 安裝程式會依作業系統的地區設定(OS locale)選擇預設的伺服器照合順序。若安裝時沿用預設值,以下兩種地區設定會得到不同結果。Microsoft Learn 的伺服器照合順序說明。
| 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