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的更多相关文章
- MySQL基础知识:Character Set和Collation
A character set is a set of symbols and encodings. A collation is a set of rules for comparing chara ...
- 解决SQL Server的cannot resolve the collation conflict问题
当没有牵涉到两个不同的数据库时,出现以上错误. Cannot resolve the collation conflict between "Chinese_PRC_CI_AS" ...
- [转]SQL Collation冲突解决 临时表
本文转自:http://ju.outofmemory.cn/entry/191163 问题描述 在SQL Server中使用一些复杂的存储过程时,我们需要借用临时表来完成一些逻辑的处理,例如:数据的临 ...
- 技术分享 | check(col_name<>'')为何把空格拒之门外
1.问题描述 前两天在群里看到同事反馈一个空格问题,大致现象如下: mysql> select @@version; +-----------+ | @@version | +--------- ...
- 一次非典型的SQL报错
昨天调试一个表值函数,结果出现了这个错误. mplicit conversion of varchar value to varchar cannot be performed because the ...
- 阿里云资深DBA专家罗龙九:云数据库十大经典案例分析【转载】
阿里云资深DBA专家罗龙九:云数据库十大经典案例分析 2016-07-21 06:33 本文已获阿里云授权发布,转载具体要求见文末 摘要:本文根据阿里云资深DBA专家罗龙九在首届阿里巴巴在线峰会的&l ...
- JS核心笔记
一.说明 JS权威指南文字用红色标出: JS高级程序设计用橙色标出; 自己加上的文字用粉红色标出: 其(一)-(九)为JS权指南,(十)为JS高级程序设计 二.记法结构 2.1字符集 Javascri ...
- django表单的api
django表单的api,参考文档:https://yiyibooks.cn/xx/Django_1.11.6/ref/forms/api.html 绑定与未绑定形式: Form要么是绑定的,要么是未 ...
- 页面出现Incorrect string以及数据库内容乱码
我在制作 (www.helpqy.com) 的时候遇到了页面报错Incorrect string的问题,我使用的是mysql,数据表中有很多中文内容,最后发现在安装mysql的时候需要选择defaul ...
随机推荐
- 设计模式六大原则(4):接口隔离原则(Interface Segregation Principle)
接口隔离原则: 使用多个专门的接口比使用单一的总接口要好. 一个类对另外一个类的依赖性应当是建立在最小的接口上的. 一个接口代表一个角色,不应当将不同的角色都交给一个接口.没有关系的接口合并在一起,形 ...
- 异构数据库迁移 db2---oracle
异构数据库迁移 其他数据库迁移到oracle,以移植db2数据库对象到Oracle的操作说明为例,其他数据库迁移到oracle类似. 移植之平台和相关工具 OS:linux DBMS:db2 Ora ...
- cocos2d-x-3.0新建工程以及移植其他平台
本文来自:http://www.zaojiahua.com/cocos2d-x-3-0.html 有将近俩个礼拜没有研究cocos2dx了,博主最近刷了些ACM的水题,越做感觉越没意思,这哪是考编程啊 ...
- 主要的核心思想是取cookie然后发查询请求,不需要浏览器做代理(转)
需求是催生项目和推进项目的不竭动力. 背景: 最近,因为媳妇要做个B超检查,想着去大医院查查应该更放心,所以就把目标瞄准在A医院.早已耳闻A院一号难求万人空巷,所以把所有能接触到的机会都看了一遍,线下 ...
- 【python】按行切分文本文件
python脚本利用shell命令来实现文本的操作, 这些命令大大减少了我们的代码量. 比如按行切分文件并返回切分后得到的文件列表,可以利用内建的split命令进行切分.为了返回得到的文件列表名,可以 ...
- POJ1201 差分约束
给定ai,bi, ci 表示区间[ai,bi]内至少有ci个点, 要求对于所有给定的ai,bi,ci, 至少多少个点才能满足题目的条件 重做这一题学到的一点是, 可以设变量来表示一些东西,然后才能找 ...
- HTTP请求响应过程 与HTTPS区别
原文:HTTP请求响应过程 与HTTPS区别 HTTP协议学习笔记,基础,干货 HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏 ...
- Windows Phone开发(9):关于页面状态
原文:Windows Phone开发(9):关于页面状态 按照一般做法,刚学会如何导航,还是不够的,因为要知道,手机里面的每个页面,就如同Web页面一样,是无状态的. 啥是无状态?如果我们玩过Web开 ...
- 给节点设置tag【从零開始cocos3.0final 】
在cocos中通过tag来管理节点是非经常常使用的:以下介绍一个关于在cocos中使用tag的实例: typedef enum{ tag1 }Tag; 这里能够使用枚举类型,来为多个节点设置tag: ...
- ubuntu上搭建工作环境
版本号ubuntu desktop, v12.4, v13.10. 长处: 1)绚丽易用的可视化环境: 2)丰富的可用package.在这点上比centos强太多.后者更新较慢: 不足: 1)在笔记本 ...