如题,我记得是不区分大小写的,但是想确认一下。请各位大侠指正,不胜感激!

解决方案 »

  1.   

    --这个是区分大小写的相关东西.
    比如说一个表中两条记录的address字段值分别为:aaaa 和 aAAa,如果用 
    select * from mytable where address = 'aaaa'
    则两条记录都查出来了,我希望只得到一条记录,这样的SQL应该怎么写?create table #a(
           [id] [char] (10),
           [address] [char] (10)
    )
    insert into #a(id , address) values('1' , 'aaaa')
    insert into #a(id , address) values('1' , 'aAAa')select * from #a where address = 'aaaa' COLLATE Chinese_PRC_CS_AS
    select * from #a where address = 'aAAa' COLLATE Chinese_PRC_CS_ASdrop table #aid         address    
    ---------- ---------- 
    1          aaaa      (所影响的行数为 1 行)id         address    
    ---------- ---------- 
    1          aAAa      (所影响的行数为 1 行)如何查只以大写AB开头的呢?
    通常情况下写select * from 表名 where 列名 like 'AB%'
    但是这样,以小写ab开头的纪录也会被查找出来 如何查只以大写AB开头的呢?
    select * from table where left(col,2) = 'AB%' COLLATE Chinese_PRC_CS_AS
    select * from table where col like 'AB%' COLLATE Chinese_PRC_CS_AS表
    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 tbdrop table tb指定排序规则即可Windows 排序规则名称 
    在 COLLATE 子句中指定 Windows 排序规则名称。Windows 排序规则名称由排序规则指示器和比较风格构成。 语法 
    < Windows_collation_name > :: =     CollationDesignator_<ComparisonStyle>    < ComparisonStyle > ::= 
            CaseSensitivity_AccentSensitivity 
            [_KanatypeSensitive [_WidthSensitive ] ] 
            | _BIN 参数 
    CollationDesignator 指定 Windows 排序规则使用的基本排序规则。基本排序规则包括: 当指定按字典排序时应用其排序规则的字母表或语言
    用于存储非 Unicode 字符数据的代码页。 
    例如 Latin1_General 或法文,两者都使用代码页 1252,或土耳其文,它使用代码页 1254。 CaseSensitivityCI 指定不区分大小写,CS 指定区分大小写。AccentSensitivityAI 指定不区分重音,AS 指定区分重音。KanatypeSensitiveOmitted 指定不区分大小写,KS 指定区分假名类型。WidthSensitivityOmitted 指定不区分大小写,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))