了解SQL Server排序规则中的Unicode和代码页

Phi*_*hil 3 sql-server collation sql-server-2008-r2

为什么所有SQL Server 2008 R2排序规则都与代码页关联.所有校对都是unicode吗?

当我们的数据库被多种语言使用不同的代码页时,如何选择排序规则?

谢谢.

Rem*_*anu 9

CHAR与NCHAR(即非Unicode与Unicode)定义字符存储编码.排序定义...排序(即排序顺序和比较规则).它们是不同的概念,虽然经常混淆.

混淆源于客户端工具使用非Unicode数据的排序规则作为提示来选择数据的代码页.请参阅代码页架构.这意味着像ADO.Net SqlClient这样的客户端可以将从服务器接收的单字节 CHAR数据正确编码为多字节 string .Net对象.列元数据将包含使用的排序规则,因此客户端将知道如何根据特定代码页解释单字节数据.

对于Unicode(NCHAR)列,客户端不需要根据代码页来解释数据,数据本身已经是多字节的,客户端将根据UCS-2编码解释它(Unicode的实际风格由SQL Server).

但是,不要将其与实际上的归类混淆:比较字符的规则.如使用排序规则中所述:

一位说英语的人会期望字符串'Chiapas'按照升序排在'Colima'之前.但是,墨西哥的西班牙语发言者可能希望以"Ch"开头的单词出现在以"C"开头的单词列表的末尾.排序规定了这些排序和比较规则.Latin_1 General collat​​ion将在'Colima'之前在ORDER BY ASC子句中排序'Chiapas',而Traditional_Spanish排序将在'Colima'之后排序'Chiapas'.

此排序规则适用于任何数据类型(CHAR非Unicode或NCHAR Unicode).