Unicode欄位也有collation
轉自:http://blogs.msdn.com/b/apgcdsd/archive/2011/01/11/unicode-collation.aspx
一個常常讓人困惑的問題就是,為什麼SQL Server 的Unicode 欄位(nvarchar/nchar/ntext)也有collation定義呢?Unicode欄位不是可以儲存多語言嗎?比如下面的表定義:
CREATE TABLE tt1
(
c1 int,
c2 nvarchar(10) collate Chinese_PRC_Stroke_CI_AS
)
上門的c2 欄位是nvarchar型別,那麼加的collate Chinese_PRC_Stroke_CI_AS有啥意義呢。 或許你會問,如果我不加上collate不就行啦. 其實如果沒有後面的collate, SQL server 會預設給你加上資料庫的collation. 也就是說nvarchar/nchar等欄位一定是有collation的.
那麼上面定義的collate有何意義?是否就是指這個c2欄位只能存放中文字元呢?不是. Unicode 的collation 的作用是排序規則. 就是說, 這個欄位依舊可以存放多國語言,但是你只能指定一種排序規則,如上面的table, 我指定的排序規則就是按照中文排序,即使你存放的是別的語言..
讓我們看一看例子:
IF OBJECT_ID ('tt1','U') IS NOT NULL
drop table tt1
go
CREATE TABLE tt1
(
c1 int,
c2 nvarchar(10) collate Chinese_PRC_Stroke_CI_AS
)
go
INSERT tt1 VALUES (1, N'一');
INSERT tt1 VALUES (2, N'二');
INSERT tt1 VALUES (3, N'三');
INSERT tt1 VALUES (4, N'四');
GO
select * from tt1 order by c2
結果如下:
c1 c2
----------- ----------
1 一
2 二
3 三
4 四
(4 row(s) affected)
你可以看到c2列的排序結果不錯. 如果我們使用另外一種collation, 那麼結果可能是不同的,讓我們看看:
IF OBJECT_ID ('tt1','U') IS NOT NULL
drop table tt1
go
CREATE TABLE tt1
(
c1 int,
c2 nvarchar(10) collate latin1_general_cs_as
)
go
INSERT tt1 VALUES (1, N'一');
INSERT tt1 VALUES (2, N'二');
INSERT tt1 VALUES (3, N'三');
INSERT tt1 VALUES (4, N'四');
GO
select * from tt1 order by c2
結果是不一樣的, C2列的order by 結果和上面是有差異的:
c1 c2
----------- ----------
1 一
3 三
2 二
4 四
(4 row(s) affected)
相關文章
- Unicode欄位也有collation?Unicode
- Mongodb 也有collation 與 如何使用MongoDB
- pydantic 欄位欄位校驗
- fastadmin 新增欄位記圖片欄位AST
- 欄位排序排序
- 資料庫匯入時“#1273 – Unknown collation: ‘utf8mb4_unicode_ci’”解決資料庫Unicode
- [BUG反饋]模型管理 > 欄位管理看不見任何欄位。這表明顯有欄位、!模型
- SQL Server Collation解惑SQLServer
- 【Mongo】mongo更新欄位為另一欄位的值Go
- sql語句修改欄位型別和增加欄位SQL型別
- oracle刪除表欄位和oracle表增加欄位Oracle
- 模型追加欄位模型
- elasticsearch 特殊欄位Elasticsearch
- 巧用欄位對映實現指定欄位的搜尋
- 快速將下劃線欄位改為駝峰欄位
- arcgis欄位值計算(擷取A欄位前8位+按照順序計算8位)
- PostgreSQL DBA(191) - CollationSQL
- SQL字元型欄位按數字型欄位排序實現方法SQL字元排序
- 通用首部欄位詳解-四大首部欄位之一
- MySQL欄位新增註釋,但不改變欄位的型別MySql型別
- MySQL 欄位約束MySql
- mysql中文欄位排序MySql排序
- SQL新增表欄位SQL
- clob 欄位查詢
- oracle中lob欄位Oracle
- 將多個JSON欄位對映到單個Java欄位JSONJava
- [BUG反饋]模型增加欄位後field_sort欄位未更新模型
- 請求首部欄位詳解-四大首部欄位之一
- SAP MIGO 報錯-在例程WERT_SIMULIEREN欄位NEUER_PREIS中欄位溢位-Go
- [Elasticsearch] 多欄位搜尋 (二) - 最佳欄位查詢及其調優(轉)Elasticsearch
- Oracle中檢視所有表和欄位以及表註釋.欄位註釋Oracle
- mongodb如何改_id欄位?MongoDB
- HTTP首部欄位詳解HTTP
- 模型資料追加欄位模型
- MySQL-刪除欄位MySql
- 常見Http首部欄位HTTP
- MongoDB更改欄位型別MongoDB型別
- laravel欄位減少增加Laravel