日期:2014-05-16  浏览次数:20383 次

针对解决sql server数据库中不区分大小写问题

转自:http://www.cnblogs.com/symbol441/archive/2007/11/23/969981.html

?

在网络上搜索相关的很多资料,总结了一下,发生这种情况的原因主要是由于排序规则引起的:
不指定排序规则的话 ?
? ?
? 临时表是否区分大小写,与tempdb数据库的排序有关.??
? 数据库对象是否区分大小写,与数据库本身的排序规则有关. ?
? 变量是否区分大小写,与数据库本身的排序规则有关,估计也是与tempdb数据库有关吧.
? 二进制编码:根据针对每个字符定义的位模式来排序与比较Microsoft®SQL Server?资料表中的资料。 Binary排序方式区分大小写,亦即小写比大写优先,且区分腔调字。这是最快的排序方式。
若未选取此选项,SQL ? Server将遵循关联之语言或字母的字典内定义的排序与比较规则。???
????
? 区分大小写指定SQL?Server区分大写与小写字母。若未选取此选项,SQL ? Server会将大写与小写字母视为相等。若您没有选取[区分大小写],SQL ? Server并不会定义小写字母与大写字母的排序方式何者较高.

解决方案:
方法一.安装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