Unicode字段也有collation

原文: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)

时间: 2024-09-30 07:48:23

Unicode字段也有collation的相关文章

MongoDB 3.4 Collation 特性解析

MongoDB 3.4 支持了 Collation特性,官方文档对这个特性的解释是 Collation allows users to specify language-specific rules for string comparison, such as rules for lettercase and accent marks. 简而言之,Collation特性允许MongoDB的用户根据不同的语言定制排序规则,举个例子,一个存储中国用户信息的集合. db.createCollectio

手动建立 Oracle9i 数据库

oracle|数据|数据库 手动建立 Oracle9i 数据库(转载) (原文刊登于2002年03月Linuxer杂志)                             作者: 何致億, 美商甲骨文公司台湾分公司特约顾问   前几期我们分别探讨 Oracle9i 核心要素与数据库实体组成,相信大家对于 Oracle9i 数据库服务器已经具有一定程度的了解了.本期我将介绍手动建置 Oracle9i 数据库的步骤与相关注意事项.   本文内容将涵盖下列主题: n          建立数据库

【阿里在线技术峰会】罗龙九:云数据库十大经典案例分析

本文根据阿里云资深DBA专家罗龙九在首届阿里巴巴在线峰会的<云数据库十大经典案例分析>的分享整理而成.罗龙九以MySQL数据库为例,分析了自RDS成立至今,用户在使用RDS过程中最常见的问题,包括:索引.SQL优化.锁.延迟.参数优化.连接数.CPU.Iops.磁盘.内存等.罗龙九通过对十大经典案例的总结,还原问题原貌,给出分析问题的思路,旨在帮助用户在使用RDS的路上少一些弯路,多一些从容. 直播视频 (点击图片查看视频) 幻灯片下载:点此进入 以下为整理内容. 案例一:索引 今天之所以将索

阿里云慢SQL优化挑战大赛分析

[背景] 阿里云慢SQL优化挑战赛:https://yq.aliyun.com/articles/136363?spm=5176.100240.searchblog.32.oYlhtr [考点分析] 本次慢SQL优化挑战赛的题目全部来自于生产案例,将众多考察点揉合到一条SQL中,主要考虑了以下方面: 表设计:考察字符和数字字段定义,字符集大小写校验,时间字段存储. 驱动表:考察多表join时候最优的连接顺序. 索引优化:考察索引消除排序以,索引隐式转换,覆盖索引避免回表的问题. 执行计划:使用e

SQL优化 · 经典案例 · 索引篇

Introduction 在这些年的工作之中,由于SQL问题导致的数据库故障层出不穷,下面将过去六年工作中遇到的SQL问题总结归类,还原问题原貌,给出分析问题思路和解决问题的方法,帮助用户在使用数据库的过程中能够少走一些弯路.总共包括四部分:索引篇,SQL改写篇,参数优化篇,优化器篇四部分,今天将介绍第一部分:索引篇. 索引问题是SQL问题中出现频率最高的,常见的索引问题包括:无索引,隐式转换.当数据库中出现访问表的SQL无索引导致全表扫描,如果表的数据量很大,扫描大量的数据,应用请求变慢占用数

关于ado的乱码

问题描述 我用c#写了个winform,用ado读数据,数据库是简体的在中文系统运行没问题可是在繁体系统运行读出的中文会有些乱码应该是编码问题,怎么解决 解决方案 解决方案二:http://it.sinoeb.cn/%CD%F8%D5%BE/Javascript%BC%BC%CA%F5/%BC%F2%B7%B1%D7%AA%BB%BBJS%B5%F7%D3%C3.html用个方法转换一下解决方案三:或者把数据库里的字段类型varchar改成nchar试试.注:存放中文字体的Varchar型解决方

SQL Server的排序规则(collation)冲突和解决方案

  什么是排序规则(collation) 关于SQL Server的排序规则,估计大家都不陌生,在创建数据库时我们经常要选择一种排序规则(conllation),一般我们会留意到每一种语言的排序规则都有许多种,比如标准大陆简体中文Chinese_PRC的排序规则就有数十种之多. 这些排序规则有什么作用呢?让我们先来看看MS官方的解释: 排序规则指定了表示每个字符的位模式.它还指定了用于排序和比较字符的规则.排序规则具有下面的特征: 语言 区分大小写 区分重音 区分假名 比如在SQL Server

查看mysql字符集及修改表结构--表字符集,字段字符集

MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的字符集.当前安装的 MySQL 所支持的字符集等. 一.查看 MySQL 数据库服务器和数据库字符集. mysql> show variables like '%char%';+--------------------------+----------------------------------

PostgreSQL 10.0 preview 功能增强 - 国际化功能增强,支持ICU(International Components for Unicode)

标签 PostgreSQL , 10.0 , International Components for Unicode , ICU , collate , 国际化 背景 ICU是一个成熟的,被广泛使用的跨平台一致性全球化支持库.使用没有任何限制的开源许可,可以被商业.开源软件随意使用. ICU is a mature, widely used set of C/C++ and Java libraries providing Unicode and Globalization support f