如何确定连接的数据库是否区分大小写

本文关键字:是否区 大小写 数据库 何确定 连接 | 更新日期: 2023-09-27 18:00:26

我需要通过编程(C#)确定连接的数据库(可以是Oracle 11g或Sql Server 2008以后的数据库)是否已设置为区分大小写,因此当我比较两个字符串(一个从数据库中检索,一个由用户输入)时,我知道是否进行区分大小写的比较。

这可能吗?如果可能,我该怎么做?

TIA

如何确定连接的数据库是否区分大小写

您可以将caseselect 一起使用

SELECT CASE WHEN 'A' = 'a' THEN 'Insensitive' ELSE 'Sensitive' END

以上内容对于整个数据库会话来说是非常一般的。更具体地说,您必须深入了解每个DBMS的数据库配置。

以下检查针对Oracle的区分大小写配置:

SELECT CASE WHEN COUNT(*) = 2 THEN 'Insensitive' ELSE 'Sensitive' END
FROM NLS_SESSION_PARAMETERS
WHERE (PARAMETER = 'NLS_COMP' AND VALUE = 'LINGUISTIC')
    OR (PARAMETER = 'NLS_SORT' AND VALUE = 'BINARY_CI')

以下检查不同级别的特定SQL Server排序规则:

-- Server level
SELECT CASE WHEN SERVERPROPERTY('COLLATION') LIKE '%_CI_%' THEN 'Insensitive' ELSE 'Sensitive' END
-- Database level
SELECT CASE WHEN DATABASEPROPERTYEX('AdventureWorks', 'Collation') LIKE '%_CI_%' THEN 'Insensitive' ELSE 'Sensitive' END
-- Column level
SELECT CASE WHEN COLLATION_NAME LIKE '%_CI_%' THEN 'Insensitive' ELSE 'Sensitive' END
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
    AND COLUMN_NAME = @column_name

这对于检查不区分大小写的排序规则来说并不是详尽无遗的,但基于SELECT name, description FROM ::fn_helpcollations(),它看起来相当不错。

SQL Server排序规则的参考(如OP评论中所述)

  • 如何检查:SQL Server检查区分大小写