设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 网络编程 >> 数据库技巧 >> 数据库知识 如何使用SQL Server校勘功能
精品推荐
数据库技巧点击TOP10
·"SQL Server不存在或访问被拒绝"问题的解决
·在SQL Server 2000里设置和使用数据库复制
·两个sql server 2000的通用分页存储过程
·自己改写的一个sql server 2000的分页存储过程
·关于Tomcat与MySQL连接池问题的详解
·如何删除数据库中的冗余数据(翻译)
·SQL Server的链接服务器技术小结
·如何修改SQL Server 2000身份验证模式和系统管理员
·Oracle中捕获问题SQL解决CPU过渡消耗
·关于MSSQL Server中DATETIME类型数据的处理
网络编程点击TOP10
·ASP.NET 程序中常用的三十三种代码
·CHK文件恢复工具
·.NET 初 级 读 本
·c#操作word表格
·我的.NET书架 (入门篇)
·『原创』C#中TreeView类操作全攻略:建立树,新增节点,删除节点,修改节点,拖动节点,与Oracle数据库交互操作(一)
·用C#实现木马程序
·从零开始学ASP.NET(基础篇)
·十天学会ASP.net之第一天
·官方水晶报表 .NET 应用程序实例下载 (C#、Visual C++.NET)
精选专题

数据库知识 如何使用SQL Server校勘功能

作者: 来源:http://www.xgdown.com/ 时间:2007-6-28 13:09:29

校勘(collation)是指对代码页、字母大小写、音调、语言和字母表的整理,很多校勘都是在数据进入数据库之前进行的,根据我的经验,北美的大部分数据库管理员都在使用默认的大小写敏感的校勘设定,这对于数据本身没有影响,但是对于数据的比较和索引会造成影响。

这篇文章将向您介绍一些相关的校勘方法,以及数据库对多种字符集的处理方法。

为了说明校勘的使用,我们首先来创建一个数据库,列表A给出了创建数据库的代码。

CREATE SCHEMA CaseCheck

GO


CREATE TABLE CaseCheck.Names
(
NamePK Int Identity(1,1) PRIMARY KEY,
Name Varchar(50) NOT NULL
)
GO


INSERT INTO CaseCheck.Names VALUES ('Fuller')
INSERT INTO CaseCheck.Names VALUES ('FuLLer')
INSERT INTO CaseCheck.Names VALUES ('FULLER')
INSERT INTO CaseCheck.Names VALUES ('fuller')
GO

列表A

列表B是一些查询,对于大小写不敏感的情况,这几个查询将返回相同的四个数据行,但是如果我们的任务是从数据行中选取大小写完全匹配的记录呢?

SELECT * FROM CaseCheck.Names    
SELECT * FROM CaseCheck.Names WHERE Name = 'fuller'    
SELECT * FROM CaseCheck.Names  WHERE Name = 'FULLER'    
SELECT * FROM CaseCheck.Names WHERE Name = 'fuller'    

GO

列表 B

现在我们就要使用校勘的功能了,尽管在数据库创建的时候,数据库管理员已经指定了校勘的选项,但是您可以通过WHERE语句中的COLLATE选项来使用不同的校勘设定,在列表C的查询中,前三个都返回了一条记录,而最后一个查询的返回结果为空。

SELECT * FROM CaseCheck.Names  WHERE Name = 'fuller'    
COLLATE Latin1_General_CS_AS
 SELECT * FROM CaseCheck.Names WHERE Name = 'FULLER'    
COLLATE Latin1_General_CS_AS    
 SELECT * FROM CaseCheck.Names WHERE Name = 'fuller'    
COLLATE Latin1_General_CS_AS
 SELECT * FROM CaseCheck.Names WHERE Name = 'FUllER'    
COLLATE Latin1_General_CS_AS
 GO

列表 C

假设您现在想把所有'fuller'形式的拼写改为'Fuller'(包括像'fUlLEr'这种毫无意义的拼写组合),通过列表D中的代码,您可以非常轻松地实现这一功能。

UPDATE CaseCheck.NamesSET Name = UPPER(LEFT(Name,1))
 + LOWER(SUBSTRING(Name,2,LEN(Name)-1))

列表D

从大型主机上导入数据的时候,我都会首先运行以上的代码,这样就不必再担心单词大小写的问题了。

如果您想查看所有的校勘选项及其简要说明,可以运行以下的SQL代码:SELECT * FROM ::fn_helpcollations()。

想要查看数据库当前的校勘设定,可以使用以下代码:

SELECT collation_name 

FROM master.sys.databases 

WHERE Name='SQLTips'

在列表E中,我添加了一些带有特殊字符的数据行,我使用了我的好朋友DejanSunderic的名字,他的名字应该拼写为Šunderic'(字母c实际上应该有重音符号的,由于使用的字体,所以显示成了现在的效果)。

INSERT INTO CaseCheck.Names VALUES 
(NChar(352)+ 'underi' + NChar(263))
INSERT INTO CaseCheck.Names VALUES 
('SUNDERIC')
INSERT INTO CaseCheck.Names VALUES
('sUnDeRI' + Nchar(263))
INSERT INTO CaseCheck.Names VALUES
('Sunderi' + Nchar(263))
GO

列表 E

如果不使用COLLATE,那么会发生非常有意思的事情,运行一下的查询语句:

SELECT * 

FROM CaseCheck.Names

WHERE Name LIKE  N'S%'

您得到的结果是:

NamePK    Name

6    SUNDERIC

7    sUnDeRIc

8    Sunderic

注意,带有特殊字符的'Šunderic'并没有被包含在内,
让我们再来看看另外一个实验:

SELECT * FROM CaseCheck.Names

ORDER BY Name

运行此查询的结果如下:

NamePK    Name

5    Šunderic

1    Fuller

2    FuLLer

3    FULLER

4    fuller

6    SUNDERIC

7    sUnDeRIc

这里有很明显的错误,PK5应当位于'Fuller'之后,我不是语言专家,因此不知道它应该位于Ss的什么位置,但是我觉得这是本地规则造成的结果,很明显,'Šunderic'应该出现在所有的'Fuller'之后,而不是在'Fuller'前面。

我还进行了另外一项实验,使用西里尔字母来拼写我的好朋友Alexander Karmanov的名字,在图片A中您可以看到西里尔字母的拼写,我运行了图片B所示的语句来添加这条记录。

图片A

图片B

图片C

使用默认的字符集,此查询将会返回一系列问号,如果您想得到正确的结果,那么必须需要使用数据库可以接受的Unicode字符集,参见图片C。

如果您想确认一个给定数据库中使用的初始校勘,可以使以下的代码:

SELECT collation_name 

FROM master.sys.databases 

WHERE Name = 'SQLTips'

数据库知识 如何使用SQL Server校勘功能 相关文章:
数据库知识 如何使用SQL Server校勘功能 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com