一直以来我们都认为数据库语句是不区分大小写,其实这是错误的认识,之所以不区分是因为数据库语言不区分大小写。这里我们以mssql2005中自带的AdventureWorksDW数据库为例。

执行以下语句

SELECT databasepropertyex('AdventureWorksDW','collation')
go
select top 1 * from Dimaccount

运行结果:

MSSQL 数据库语句原来是区分大小写的啊-LMLPHP

这里的Dimaccount表名应该是DimAccount(表名大小写问题),然后执行以下语句:

alter database AdventureWorksDW  COLLATE  SQL_Latin1_General_CP1_CS_AS
go
select top 1 * from Dimaccount
运行结果:

MSSQL 数据库语句原来是区分大小写的啊-LMLPHP

运行select top 1 * from DimAccount一切正常

所以说sql语句不区分大小写这种说法是不对,是否区分主要看数据库COLLATE 属性是否区分大小。

_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   区分大小写、区分重音、区分假名类型、区分宽度

05-11 16:15