邮件服务器SQL Server大小写敏感问题

在默认的情况下,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邮件帐号就不区分大小。



2013-07-08 14:18
邮件服务器DBMail
邮件服务器DBMail V5.0 (更新2018.05.23)
Download
DBMail产品改良计划
完美的产品体验,需要有您的参与。
在线填写,立即参与
界面/演示
界面美观大方、简单易用。
界面预览
邮件服务器DBMail  |  购买DBMail  |  软件更新  |  网站更新  |  联系遥志  |  站点地图  |  邮件服务器相关  |  代理合作
遥志软件 版权所有(C)2000-2022 湘ICP备13011306号-3 湘公网安备 43010202000264号
Copyright(C) 2000-2022 Youngzsoft Inc. All Rights Reserved.