转自: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))
分享到:
相关推荐
在 SQL Server 中,默认情况下,数据库是区分大小写的,但是可以通过设置 COLLATE 来控制大小写的敏感度。COLLATE 子句用于指定数据库或表中的排序规则和大小写敏感度。 在 SQL Server 中,COLLATE 子句可以应用于...
SQL Server 设置数据区分大小写的五种方法: 第一种:在数据库中简单设置一下即可。 第二种: ALTER TABLE tb ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CI_AS --不区分大小写 ALTER TABLE tb ALTER...
在SQL Server 2008中,对于表名、字段名等标识符是否区分大小写是一个重要的配置选项,这对于数据库应用程序的设计和开发具有重要意义。在实际应用中,合理设置表名、字段名的大小写敏感性可以提高数据的一致性和...
### 数据库区分大小写的设置 在数据库管理领域中,如何处理字符串中的大小写敏感性是一项重要的配置选项。不同的数据库系统提供了各自独特的设置方法来控制这一行为。本文将深入探讨SQL Server与MySQL这两种主流...
在SQL Server数据库中遇到中文乱码问题,通常是由于安装时默认的排序规则不适用于中文环境导致的。默认情况下,SQL Server可能使用拉丁文排序规则,这在处理中文字符时会出现问题。解决这个问题需要理解SQL Server的...
例如,如果表`TUser`中有一个字段`Name`,其中包含值“TonyTang”,直接使用`LIKE`操作符进行大小写不匹配的搜索将无法返回结果。解决办法是使用`UPPER()`函数或`ILIKE`操作符。`UPPER()`可以将字符串转换为大写,而...
解决SQL Server 2008中SQL查询语句字段值不区分大小写的问题,可以通过调整数据库、表或查询语句的排序规则来实现。选择哪种方法取决于你的具体需求和对系统影响的接受程度。在实施这些解决方案之前,最好先在测试...
` 在此注意,forName 方法的参数字符串必须完全相同于以上内容,大小写是区分的,其实这个串就是驱动类的完整名称:包名+类名。 获得一个连接 在操作数据库之前,要先获得与数据库的一个连接,使用如下代码格式:`...
- `Chinese_PRC_CI_AI` 是一个具体的排序规则,表示中国地区(PRC)的不区分大小写和重音(CI)以及支持多种语言(AI)的排序规则。 4. **理解排序规则** - 排序规则由两部分组成:前缀和后缀。 - 前缀定义了...
与Oracle相比,SQL Server 默认支持区分大小写的标识符。这意味着在SQL Server中创建表时,无需额外操作即可保留标识符的原始大小写状态。SQL Server使用方括号 (`[]`) 来指定标识符应保持原始大小写。这种机制与...
SQL Server默认情况下对标识符(如表名、列名等)是大小写不敏感的,但对于字符串值(如WHERE子句中的搜索条件)则是大小写敏感的。这种行为是由数据库的排序规则(Collation)所决定的。不同的排序规则会导致不同的...
- `_CI`: 不区分大小写。 - `_AI`: 不区分重音。 - `_WS`: 区分全半角。 更多关于排序规则的信息,请参考官方文档。 #### 四、SQL Server 2005 数据库表的操作 **表的创建** (`CREATE TABLE`) 是数据库中最常见的...
例如,由于 Sybase 数据库区分大小写,而 SQL Server 默认不区分,可能导致违反唯一索引的错误。对此有两种解决方案: 1. 删除大小写不一致导致冲突的记录。 2. 创建一个区分大小写的 SQL Server 实例。 整个转换...
SQL(Structured Query Language)是数据库的标准查询语言,不区分大小写,注释使用"--",SQL语句通常以分号结尾,但在某些环境下可省略。 数据库操作包括插入(INSERT)、删除(DELETE)、更新(UPDATE)等。例如...
在SQL SERVER数据库管理中,优化是至关重要的,它涉及数据库设计、查询优化、索引管理等多个方面,旨在提高系统性能、减少资源消耗并确保数据的一致性和完整性。以下是对SQL SERVER数据库优化的一些核心知识点: 1....
本文设计的函数依照 Chinese_PRC_CI_AS_WS 排序规则(大陆地区简体字,不区分大小写,区分重音,不区分全角半角),音节的排序顺序为依次升序排列。拼音字母在汉语拼音表中的序号作为它们相互比较大小的依据,如果两...
- **大小写敏感性问题**:Sybase数据库区分大小写,而Sql Server默认不区分。这可能导致唯一索引冲突。有两种解决方法:一是删除大小写不一致的记录;二是创建一个区分大小写的Sql Server实例。 在整个转换过程中,...
- "CI" 代表Case Insensitive(不区分大小写),这意味着在比较字符串时,大小写不被考虑。 - "_AS" 代表ASCII Sort Order(ASCII排序顺序),它规定了在遇到无法映射到Unicode的非ASCII字符时的处理方式。 当安装...