`
bdk82924
  • 浏览: 563450 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

针对解决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   table   tb   

  
小结一下:

--表
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     
  
--不区分大小写   

指定排序规则即可 
  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))   

   

分享到:
评论

相关推荐

    sqlserver 区分大小写的相关设置

    在 SQL Server 中,默认情况下,数据库是区分大小写的,但是可以通过设置 COLLATE 来控制大小写的敏感度。COLLATE 子句用于指定数据库或表中的排序规则和大小写敏感度。 在 SQL Server 中,COLLATE 子句可以应用于...

    SQL Server 设置数据区分大小写的五种方法

    SQL Server 设置数据区分大小写的五种方法: 第一种:在数据库中简单设置一下即可。 第二种: ALTER TABLE tb ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CI_AS --不区分大小写 ALTER TABLE tb ALTER...

    SQL2008对表名及字段区分大小写

    在SQL Server 2008中,对于表名、字段名等标识符是否区分大小写是一个重要的配置选项,这对于数据库应用程序的设计和开发具有重要意义。在实际应用中,合理设置表名、字段名的大小写敏感性可以提高数据的一致性和...

    数据库区分大小写的设置

    ### 数据库区分大小写的设置 在数据库管理领域中,如何处理字符串中的大小写敏感性是一项重要的配置选项。不同的数据库系统提供了各自独特的设置方法来控制这一行为。本文将深入探讨SQL Server与MySQL这两种主流...

    SqlServer数据库中文乱码问题解决方法

    在SQL Server数据库中遇到中文乱码问题,通常是由于安装时默认的排序规则不适用于中文环境导致的。默认情况下,SQL Server可能使用拉丁文排序规则,这在处理中文字符时会出现问题。解决这个问题需要理解SQL Server的...

    SQL Server 2008中SQL查询语句字段值不区分大小写的问题解决

    解决SQL Server 2008中SQL查询语句字段值不区分大小写的问题,可以通过调整数据库、表或查询语句的排序规则来实现。选择哪种方法取决于你的具体需求和对系统影响的接受程度。在实施这些解决方案之前,最好先在测试...

    PostgreSQL数据库对象名大小写敏感的解决方法

    例如,如果表`TUser`中有一个字段`Name`,其中包含值“TonyTang”,直接使用`LIKE`操作符进行大小写不匹配的搜索将无法返回结果。解决办法是使用`UPPER()`函数或`ILIKE`操作符。`UPPER()`可以将字符串转换为大写,而...

    java 连接sql server数据库

    ` 在此注意,forName 方法的参数字符串必须完全相同于以上内容,大小写是区分的,其实这个串就是驱动类的完整名称:包名+类名。 获得一个连接 在操作数据库之前,要先获得与数据库的一个连接,使用如下代码格式:`...

    SQL2005 数据库大小写规则

    - `Chinese_PRC_CI_AI` 是一个具体的排序规则,表示中国地区(PRC)的不区分大小写和重音(CI)以及支持多种语言(AI)的排序规则。 4. **理解排序规则** - 排序规则由两部分组成:前缀和后缀。 - 前缀定义了...

    如何:让Oracle表及字段显示为区分大小写

    与Oracle相比,SQL Server 默认支持区分大小写的标识符。这意味着在SQL Server中创建表时,无需额外操作即可保留标识符的原始大小写状态。SQL Server使用方括号 (`[]`) 来指定标识符应保持原始大小写。这种机制与...

    SQL查询区别大小写

    SQL Server默认情况下对标识符(如表名、列名等)是大小写不敏感的,但对于字符串值(如WHERE子句中的搜索条件)则是大小写敏感的。这种行为是由数据库的排序规则(Collation)所决定的。不同的排序规则会导致不同的...

    SQL SERVER2005数据库培训

    - `_CI`: 不区分大小写。 - `_AI`: 不区分重音。 - `_WS`: 区分全半角。 更多关于排序规则的信息,请参考官方文档。 #### 四、SQL Server 2005 数据库表的操作 **表的创建** (`CREATE TABLE`) 是数据库中最常见的...

    Sybase数据转成SqlServer数据库的步骤.pdf

    例如,由于 Sybase 数据库区分大小写,而 SQL Server 默认不区分,可能导致违反唯一索引的错误。对此有两种解决方案: 1. 删除大小写不一致导致冲突的记录。 2. 创建一个区分大小写的 SQL Server 实例。 整个转换...

    sqlserver数据库

    SQL(Structured Query Language)是数据库的标准查询语言,不区分大小写,注释使用"--",SQL语句通常以分号结尾,但在某些环境下可省略。 数据库操作包括插入(INSERT)、删除(DELETE)、更新(UPDATE)等。例如...

    优化SQL SERVER数据库知识总结

    在SQL SERVER数据库管理中,优化是至关重要的,它涉及数据库设计、查询优化、索引管理等多个方面,旨在提高系统性能、减少资源消耗并确保数据的一致性和完整性。以下是对SQL SERVER数据库优化的一些核心知识点: 1....

    SQL Server中获取多音字拼音首字母.pdf

    本文设计的函数依照 Chinese_PRC_CI_AS_WS 排序规则(大陆地区简体字,不区分大小写,区分重音,不区分全角半角),音节的排序顺序为依次升序排列。拼音字母在汉语拼音表中的序号作为它们相互比较大小的依据,如果两...

    Sybase数据转成SqlServer数据库的步骤[汇编].pdf

    - **大小写敏感性问题**:Sybase数据库区分大小写,而Sql Server默认不区分。这可能导致唯一索引冲突。有两种解决方法:一是删除大小写不一致的记录;二是创建一个区分大小写的Sql Server实例。 在整个转换过程中,...

    SQL Server 2008乱码问题

    - "CI" 代表Case Insensitive(不区分大小写),这意味着在比较字符串时,大小写不被考虑。 - "_AS" 代表ASCII Sort Order(ASCII排序顺序),它规定了在遇到无法映射到Unicode的非ASCII字符时的处理方式。 当安装...

Global site tag (gtag.js) - Google Analytics