在默认的情况下,SQL Server所创建的数据库是大小写不敏感的,例如 select * from xxxtable where xxxname='tim' 与 select * from xxxtable where xxxname='TIM'
返回的结果是完全一样的。
查看数据库大小写是否敏感
对于一个已经建好的数据库,可以查看大小写是否敏感。下面以SQL Server 2005为例,可以打开SQL Server Management Studio,即企业管理器,选择这个数据库,从右键菜单中选择Property属性,打开数据库的属性对话框,如下图所示找到数据库的Collation属性。
Collation属性“Chinese_PRC_CI_AS”,Chinese_PRC_指针对大陆简体字UNICODE的排序规则,CI (Case Insensitivity,不敏感)或CS (Case Sensitivity,敏感),分别指定区分以及不区分大小写;AI(Accent Insensitivity,不区分)或AS(Accent Sensitivity,区分),分别指定是否区分重音。
创建大小写敏感的新数据库
在SQL Server中新建一个数据库的时候,该数据库的大小写敏感选项,即Collation属性的默认设置是“大小写不敏感”。如果要创建一个大小写敏感的数据库,可以在创建的时候明确指定所需的Collation属性。
以通过SQL Server 2005企业管理器新建数据库为例,如果要创建大小写敏感的数据库,需要注意在创建的时候,要将Option选项卡中的Collation属性从“”改为“Chinese_PRC_CS_AS”。
数据库大小写敏感相互转换
SQL Server的数据库大小写是否敏感,可以进行转换。在进行转换的之前,注意要断开所有对于该数据库的访问,不然转换不能成功。进入SQL Server企业管理器,运行如下的命令就可以使一个数据库在大小写是否敏感中进行切换。
设置SQL脚本大小写不敏感:ALTER DATABASE [DatabaseName] COLLATE Chinese_PRC_CI_AI
设置SQL脚本大小写敏感:ALTER DATABASE [DatabaseName] COLLATE Chinese_PRC_CS_AI
土耳其语的大小写问题
特别要注意的是,在土耳其语Turkish下的SQL Server数据库,对于I和i以及头上没点的I和ı,是有不同的处理方式,即总是大小写敏感的;其它的字母才会按照数据库Collation属性来区分大小写是否敏感。
例如,即使该数据库已设置了大小写不敏感(Turkish_CI_AS),select * from xxxtable where xxxname='iii'与select * from xxxtable where xxxname='III',这两个语句会返回不同的结果,原因在于查询条件中包含I和i。
但是,对于这个Turkish_CI_AS的大小写不敏感的数据库,如下两个语句会返回相同的结果:select * from xxxtable where xxxname='AAA', select * from xxxtable where xxxname='aaa',原因在于查询条件中不含I和i的比较。
解决方法
如果创建的数据库区分大小写,那么DBMail的邮箱帐号也必须区分大小,不然DBMail邮箱帐号会认证失败,从而导致不能正常收发邮件,解决方法如下。
1) 查看区分大小写的数据库。
2) 在“数据库属性”对话框中,把“Collation”属性设置为“Chinese_PRC_CI_AS”,不区分大小写,详细参考上文中的“查看数据库大小写是否敏感”。
3) 设置完成后,DBmail邮件帐号就不区分大小。