前言
昨天在論壇裏面遇到一個比較特殊的場景。他的公司做的是海外的項目,中英再加一個當地語言,要兼容三種文字啊.
那有沒有什麼字符集或排序規則,能兼容所有文字的?對於海外項目很痛苦啊 .Oracle 有AL32UTF8 ,MySQL 有UTF8 ,那SQL Server 有嗎?
基本概念
- Unicode 是「字符集」
- UTF-8 是「編碼規則」
- 字符集:爲每一個「字符」分配一個唯一的 ID(學名爲碼位 / 碼點 / Code Point)
- 編碼規則:將「碼位」轉換爲字節序列的規則(編碼/解碼 可以理解爲 加密/解密 的過程)
排序規則
比如我們常用的:Chinese_PRC_CI_AS ,前面部分是Chinese_PRC 這個部分表示支持的中國大陸的字符集。但是這裏有個特別需要注意的事項,劃重點,在很多博客上面會有這樣的描述:
大陸簡體字UNICODE的排序規則
這裏有很大的歧義。並不是說這個排序規則對所有字符都是有的Unicode。這樣說並不準確。
排序規則的後半部份即後綴 含義:
_BIN 二進制排序
_CI(CS) 是否區分大小寫,CI不區分,CS區分(case-insensitive/case-sensitive)
_AI(AS) 是否區分重音,AI不區分,AS區分(accent-insensitive/accent-sensitive)
_KI(KS) 是否區分假名類型,KI不區分,KS區分(kanatype-insensitive/kanatype-sensitive)
_WI(WS) 是否區分寬度 WI不區分,WS區分(width-insensitive/width-sensitive)
區分大小寫:如果想讓比較將大寫字母和小寫字母視爲不等,請選擇該選項。
區分重音:如果想讓比較將重音和非重音字母視爲不等,請選擇該選項。如果選擇該選項,
比較還將重音不同的字母視爲不等。
區分假名:如果想讓比較將片假名和平假名日語音節視爲不等,請選擇該選項。
區分寬度:如果想讓比較將半角字符和全角字符視爲不等,請選擇該選項
Unicode
SQL SERVER 是支持Unicode的。對應的字符類型是nchar,nvarchar.
總結
所以,SQL SERVER 沒有這樣的和ORACLE UTF-8類似的排序規則。。如果是三種文字,建議把所有的字符類型定義爲nchar,nvarchar 。