Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1035321
  • 博文数量: 243
  • 博客积分: 3053
  • 博客等级: 中校
  • 技术积分: 2975
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-02 21:11
文章分类

全部博文(243)

文章存档

2013年(2)

2012年(20)

2011年(5)

2010年(114)

2009年(102)

我的朋友

分类: Mysql/postgreSQL

2011-11-22 11:16:09

1, 查看数据库所有的排序规则
select * from fn_helpcollations()
 
2, 查看默认的数据库的排序规则
select SERVERPROPERTY('Collation')
 
3, 更改数据库的排序规则

ALTER   TABLE   tb
 
ALTER   COLUMN   colname   nvarchar(100)   COLLATE   Chinese_PRC_CI_AS 
--不区分大小写
ALTER   TABLE   tb 
 
ALTER   COLUMN   colname   nvarchar(100)   COLLATE   Chinese_PRC_CS_AS 
--区分大小写
数据库
ALTER   DATABASE   database 
COLLATE   Chinese_PRC_CS_AS 
--区分大小写

ALTER   DATABASE   database COLLATE Chinese_PRC_CI_AS --不区分大小写


方法一.安装SQL时选择区分大小写
或安装完以后重建mastar,选择区分大小
C:\Program   Files\Microsoft   SQL   Server\
80\Tools\Binn\rebuildm.exe

方法二.sql   server  
8.0以上的版本才可以,7.0及其以下不支持
alter   database   数据库   COLLATE   Chinese_PRC_CS_AS
修改排序规则,改成大小写敏感的排序规则
如果只修改一个表,用alter   table语句 
如果修改一个库的默认排序规则,用alter   datebase语句 
如果修改整个服务器的默认排序规则,用Rebuildm.exe重建master库 
--指定排序规则就可以了

--示例 
select   replace('AbacB'   collate   Chinese_PRC_CS_AS_WS,'B','test'

--如果你是要求表支持,则可以建表时指定排序规则,这样replace就不用写排序规则了 

--示例 
create   table   tb(a   varchar(20)   collate   Chinese_PRC_CS_AS_WS) 
insert   tb   values('Abac'

select   replace(a,'a','test')   from   tb

drop   table   tb

指定排序规则即可

Windows   排序规则名称 
在   COLLATE   子句中指定   Windows   排序规则名称。Windows   排序规则名称由排序规则指示器和比较风格构成。 

语法 
<   Windows_collation_name   >   ::   = 

        CollationDesignator_
<ComparisonStyle>

       
<   ComparisonStyle   >   ::= 
                CaseSensitivity_AccentSensitivity 
               
[_KanatypeSensitive   [_WidthSensitive   ]   ] 
                ¦   _BIN 

参数 
CollationDesignator 

指定   Windows   排序规则使用的基本排序规则。基本排序规则包括: 

当指定按字典排序时应用其排序规则的字母表或语言


用于存储非  
Unicode   字符数据的代码页。 
例如   Latin1_General   或法文,两者都使用代码页  
1252,或土耳其文,它使用代码页   1254。 

CaseSensitivity

CI   指定不区分大小写,CS   指定区分大小写。

AccentSensitivity

AI   指定不区分重音,
AS   指定区分重音。

KanatypeSensitive

Omitted   指定不区分大小写,KS   指定区分假名类型。

WidthSensitivity

Omitted   指定不区分大小写,WS   指定区分大小写。

BIN

指定使用二进制排序次序。 


如果你只是目前查询区分,那么还是不要这样改,免得又反悔,如此查询:
select   *   from   a 
/*
a_nam             a_add           
----------   ---------- 
1                     aa
1                     bb
2                     cc
2                     vv
2                     kk
3                     dd
3                     ee
4                     dd
5                     ee
6                     yy
6                     yy

(11   row(s)   affected)
*/
现在我们查询a_add  
=   'aa'的,'Aa'等等不行!
Example  
1

select   *   from   a 
where   a_add   collate   Chinese_PRC_CS_AS_WS   =   'aa' 
/*
a_nam             a_add           
----------   ---------- 
1                     aa

(1   row(s)   affected)
*/

Example  
2

select   *   from   a 
where   a_add   collate   Chinese_PRC_CS_AS_WS   =   'Aa' 
/*
a_nam             a_add           
----------   ---------- 

(0   row(s)   affected)
*/

方法三.上面的记不住,那么就用最笨的方法,转化为ascii
select   *   from   a
where 
ascii(substring(a_add,1,1))   =   ascii(substring('Aa',1,1))
and 
ascii(substring(a_add,2,1))   =   ascii(substring('Aa',2,1))
/*
a_nam             a_add           
----------   ---------- 

(0   row(s)   affected)
*/

方法三:任何版本都可以
select   *   from   a 
where   cast(a_add   as   varbinary(10))=   cast('aa'   as   varbinary(10))
阅读(3452) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~