SQL SERVER 大小写敏感问题

SQL SERVER大小写敏感问题,其实是两个问题:

  • 标识符,例如表名和字段名,是否区分大小写;
  • 字符型字段进行比较时,是否区分大小写。

第一个问题

与SQL SERVER数据库的COLLATE属性有关。这个属性的关于大小写敏感子属性的取值有两种:
CI case-insensitive
CS case-sensitive

当创建表等对象时,数据字典中保存的表明和字段名的大小写等同于SQL语句中的大小写。
如果用大写T创建表,字典中保存的表名就是大写T;
如果用小写t创建表,字典中保存的表名就是小写t。

如果数据库的COLLATE是CI,则
select * from t
select * from T
查询到的是同一个表,原因在于在将SQL语句中的表名与数据字典中的表名进行比较时,采用了CI比较,也就是忽略了大小写。
btw 此时数据库中不可能同时存在表t和表T。

如果数据库的COLLATE是CS,则
select * from t
select * from T
查询到的是不同的表,原因在于在将SQL语句中的表名与数据字典中的表名进行比较时,采用了CS比较,也就是不忽略了大小写。

此时数据库中可以同时存在表t和表T。
如果此时修改库的COLLATE属性从CS到CI,执行会失败:
ALTER DATABASE [test] COLLATE Chinese_PRC_CI_AS
消息 1505,级别 16,状态 1,第 1 行
CREATE UNIQUE INDEX 语句终止,因为发现对象名称 'sys.sysschobjs' 和索引名称 'nc1' 有重复的键。重复的键值为 (0, 1, T)。
消息 5072,级别 16,状态 1,第 1 行
ALTER DATABASE 失败。无法将数据库 'test' 的默认排序规则设置为 Chinese_PRC_CI_AS。

第二个问题

与数据库和字段的COLLATE属性有关。后者的单独设置可以覆盖数据库的全局设置。

库、字段都可以设置 collate 属性,但是表不能设置 collate 属性

[@more@]

查询数据库的大小写敏感设置

use [xxx[
execute sp_server_info '16'
SELECT case when 'A'='a' then 'case_insensitive' else 'case_sensitive' end

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9844649/viewspace-1034025/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9844649/viewspace-1034025/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server 中,可以通过修改排序规则来设置大小写敏感(Case-Insensitive)。排序规则是用于定义如何比较和排序字符串的规则集。如果排序规则是不区分大小写的,则字符串的大小写将不会影响排序或比较结果。 以下是在 SQL Server 中设置大小写敏感的步骤: 1. 首先,使用 `sp_helpsort` 存储过程查看当前 SQL Server 实例中支持的排序规则。找到一个不区分大小写的排序规则,比如 `SQL_Latin1_General_CP1_CI_AS`。 ```sql EXEC sp_helpsort ``` 2. 修改数据库中需要设置大小写敏感的列的排序规则,使用 `ALTER TABLE` 和 `ALTER COLUMN` 语句。例如,将一个表中的 `Name` 列的排序规则更改为 `SQL_Latin1_General_CP1_CI_AS`: ```sql ALTER TABLE MyTable ALTER COLUMN Name VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS ``` 在这个例子中,`COLLATE` 子句指定了使用的排序规则。 3. 如果你需要在新的表或列中设置大小写敏感,可以在创建表或列时指定使用的排序规则。例如,创建一个不区分大小写的表: ```sql CREATE TABLE MyTable ( Name VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS, Age INT ) ``` 在这个例子中,`Name` 列的排序规则设置为 `SQL_Latin1_General_CP1_CI_AS`。 需要注意的是,在修改现有表或列的排序规则时,可能需要进行一些数据转换操作,这可能会影响性能。因此,在创建表或列时指定排序规则是最好的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值