SQL Server 2014案例敏感性问题

时间:2016-06-01 07:10:56

标签: sql-server database azure case-sensitive

我正在将数据库和etl从MySQl迁移到SQL Server,并且遇到了区分大小写的问题。 在MySql中,数据库被设置为区分大小写,因为我们加载的应用程序之一具有类似于' Divh'和' divh'在一组(它不是我做) 一切都很好,在etl,查询报告等所有地方的选择语句都使用了作者想要的任何案例 - 有些都是UPPER一些最低混合。 因此,换句话说,MYSql具有不区分大小写的DDL和SQL,但允许区分大小写的数据。

看起来SQL Server无法满足这一要求。如果我选择CI归类,则所有表和列都与数据一起不敏感(可能)。 和反过来 - 如果它的CS一切都区分大小写。 我读得对吗? 如果是这样,那么我要么必须更改数据库中每个文本列的排序规则 或编辑每个查询。

具有讽刺意味的是,第一次测试是使用相同排序规则设置的Azure SQL数据库(SQL_Latin1_General_CP1_CS_AS) 并且它并不关心select中表名的大小写。

有什么想法吗?

由于 JC

1 个答案:

答案 0 :(得分:1)

首先,您是否知道SQL Server中的每个级别都存在排序规则设置;实例,数据库,表格甚至字段级别。

听起来您只想对受影响的字段强制执行区分大小写的排序规则,使数据库和DDL整体不区分大小写。

我过去使用过的另一个技巧是,如果要在不同情况之间进行数据比较,则将值转换为VARBINARY数据类型,但不需要更改任何内容的排序规则。

例如:

DECLARE @Var1 VARCHAR(5) 
DECLARE @Var2 VARCHAR(5)

SET @Var1 = 'Divh' 
SET @Var2 = 'divh'

--Comparison1:
IF @Var1 = @Var2
    PRINT 'Same'
ELSE
    PRINT 'Not the same'

--Comparison2:
IF CAST(@Var1 AS VARBINARY) = CAST(@Var2 AS VARBINARY)
    PRINT 'Same'
ELSE
    PRINT 'Not the same'