SQL Server 大小写敏感的问题
http://www.jiaock.com/sqlserver/2012/0625/2200.html
当修改默认排序规则的时候,经常会出现无法用排他锁锁定该数据库的错误
首先应该去掉其他的访问线程
CREATE TABLE #HarveyLock
(
SPID INT,
DBID INT,
OBJID INT,
INDID INT,
TYPE VARCHAR(100),
RESOURCE VARCHAR(100),
MODE VARCHAR(100),
STATUS VARCHAR(100)
)
INSERT INTO #HarveyLock EXEC SP_LOCK
SELECT distinct 'kill ' +convert(varchar,SPID ) FROM #HarveyLock
杀死线程后,在修改数据库的排序规则
表
ALTER TABLE 表名字
ALTER COLUMN 列名字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
指定使用二进制排序次序。
UPPER (Transact-SQL)
返回小写字符数据转换为大写的字符表达式。
Transact-SQL 语法约定
语法
UPPER ( character_expression ) 参数
character_expression
一个字符数据表达式。character_expression 可以是常量、变量,也可以是字符列或二进制数据列。
character_expression 的数据类型必须可隐式转换为 varchar。否则,请使用 CAST 显式转换 character_expression。
返回类型
varchar 或nvarchar
LOWER
将大写字符数据转换为小写字符数据后返回字符表达式。
语法
LOWER ( character_expression )
参数
character_expression
是 字符或二进制数据表达式。character_expression 可以是常量、变量或列。character_expression 必须是可以隐性转换为 varchar 的数据类型。否则,使用 CAST 显式转换 character_expression。
返回类型
varchar
http://blog.csdn.net/bamboopot/article/details/7275650
1.设置SQL脚本大小写不敏感
USE [master]
GO
ALTER DATABASE [DatabaseName] COLLATE Chinese_PRC_CI_AI
GO
2.设置大SQL脚本大小写敏感
USE [master]
GO
ALTER DATABASE [DatabaseName] COLLATE Chinese_PRC_CS_AI
GO
3.设置参考值
_CI_AI 不区分大小写、不区分重音、不区分化名类型、不区分宽度
_CI_AI_WS 不区分大小写、不区分重音、不区分化名类型、区分宽度
_CI_AI_KS 不区分大小写、不区分重音、区分化名类型、不区分宽度
_CI_AI_KS_WS 不区分大小写、不区分重音、区分化名类型、区分宽度
_CI_AS 不区分大小写、区分重音、不区分化名类型、不区分宽度
_CI_AS_WS 不区分大小写、区分重音、 不区分化名类型、区分宽度
_CI_AS_KS 不区分大小写、区分重音、区分化名类型、不区分宽度
_CI_AS_KS_WS 不区分大小写、区分重音、区分化名类型、区分宽度
_CS_AI 区分大小写、不区分重音、 不区分化名类型、不区分宽度
_CS_AI_WS 区分大小写、不区分重音、不区分化名类型、区分宽度
_CS_AI_KS 区分大小写、不区分重音、区分化名类型、不区分宽度
_CS_AI_KS_WS 区分大小写、不区分重音、区分化名类型、区分宽度
_CS_AS 区分大小写、区分重音、不区分化名类型、不区分宽度
_CS_AS_WS 区分大小写、区分重音、不区分化名类型、区分宽度
_CS_AS_KS 区分大小写、区分重音、区分化名类型、不区分宽度
_CS_AS_KS_WS 区分大小写、区分重音、区分化名类型、区分宽度
*CS(Case-Sensitivity缩写):CS 指定区分大小写
CI(Case-Insensitivity缩写):CI 指定不区分大小写。
公司常用的说话集为:Chinese_PRC_CI_AS
举例解析 Chinese_PRC_CS_AI_WS
前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规矩。
排序规矩的后半部份即后缀 含义:
_BIN 二进制排序
_CI(CS) 是否区分大小写,CI不区分,CS区分
_AI(AS) 是否区分重音,AI不区分,AS区分
_KI(KS) 是否区分化名类型,KI不区分,KS区分
_WI(WS) 是否区分宽度WI不区分,WS区分
区分大小写:若是想让斗劲将大写字母和小写字母视为不等,请选择该选项。
区分重音:若是想让斗劲将重音和非重音字母视为不等,请选择该选项。若是选择该选项,斗劲还将重音不合的字母视为不等。
区分化名:若是想让斗劲将片化名和平化名日语音节视为不等,请选择该选项。
区分宽度:若是想让斗劲将半角字符和全角字符视为不等,请选择该选项
SQLSERVER大小写敏感问题
http://blog.itpub.net/post/31716/500561
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 属性
查询数据库的大小写敏感设置
use [xxx[
execute sp_server_info '16'
SELECT case when 'A'='a' then 'case_insensitive' else 'case_sensitive' end
mssql名字的大小写敏感性
http://www.fastgun.net/jc/article/16/48/2006050919595.htm
在 MySQL 中,数据库和表对就于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的。一个特例是 Mac OS X,当缺省的 HFS+ 文件系统使用时。然而 Mac OS X 还支持 UFS 卷,那些在 Mac OS X 是大小写敏感的就如他们在任一 Unix 上一样。查看章节 1.8.3 MySQL 对 ANSI SQL92 的扩展。
注意:尽管在 Windows 中数据库与表名是忽略大小写的,你不应该在同一个查询中使用不同的大小写来引用一个给定的数据库和表。下面的查询将不能工作,因为它以 my_table和 MY_TABLE引用一个表:
mysql>SELECT * FROM my_table WHERE MY_TABLE.col=1;
列名与列的别名在所有的情况下均是忽略大小写的。
表的别名是区分大小写的。下面的查询将不能工作,因为它用 a和 A引用别名:
mysql>SELECT col_name FROM tbl_name AS a -> WHEREa.col_name = 1 OR A.col_name = 2;
如果记忆数据库和表名的字母大小写有困难,建议采用一个一致一约定,例如总是以小写字母创建数据库和表。
避免这个问题的另一个办法就是以 -O lower_case_table_names=1参数启动 mysqld。缺省地在 Windows 中这个选项为 1 ,在 Unix 中为 0。
如果lower_case_table_names 为1 ,MySQL 将在存储与查找时将所有的表名转换为小写字线。(从 MySQL 4.0.2 开始,这个选项同样适用于数据库名。) 注意,当你更改这个选项时,你必须在启动 mysqld前首先将老的表名转换为小写字母。
如果将MyISAM 从Windows 移动到一个Unix 磁盘中,在某些情况下你可能需要使用 “mysql_fix_extensions”工具来修正指定数据库目录下的文件扩展名(小写字母 “.frm”,大写字母 “.MYI”和 “.MYD”)。“mysql_fix_extensions” 存放在 “scripts” 子目录下。
联系客服