No Microsoft SQL Server (2014), é possível escolher entre um agrupamento que não diferencia maiúsculas de minúsculas e diferencia maiúsculas de minúsculas.
Meu motivo para usar um agrupamento que diferencia maiúsculas de minúsculas seria fazer "test" = "TEST"
return false
.
No entanto, o que gostaria de preservar é que, quando "TEST"
existe uma tabela, escrever uma consulta como select * from test;
ainda funcionaria. Quando o banco de dados tem um agrupamento que diferencia maiúsculas de minúsculas, isso não acontece, porque eu precisaria escrevê-lo comoselect * from TEST;
Existe uma maneira de definir "agrupamento de objetos" e "agrupamento de strings" separadamente?
Principalmente "sim", dependendo de quão "automágico" você deseja que tudo funcione.
Primeiro: O agrupamento do identificador do banco de dados (ou seja, nomes de objetos, nomes de colunas, nomes de índices, etc.) é obtido do agrupamento padrão do banco de dados. Isso determinará o Collation de colunas como
sys.objects.name
, etc. Portanto, para fazer isso, você pode criar ou alterar o banco de dados para ter um Collation que não diferencie maiúsculas de minúsculas, comoLatin1_General_100_CI_AS_SC
. Isso permitirá que você tenha uma tabelaTEST
que será válida em consultas comoselect * from test;
.O agrupamento do identificador com escopo no servidor (por exemplo, nomes de banco de dados) é tratado pelo agrupamento padrão da instância.
Segundo: Se o Collation padrão de um banco de dados não diferenciar maiúsculas de minúsculas, as expressões que são inteiramente strings literais e/ou variáveis e/ou parâmetros de saída e/ou valores de retorno UDF serão tratadas como maiúsculas e minúsculas. Para essas expressões, você precisaria substituir esse comportamento padrão, por expressão, usando a
COLLATE
cláusula.Por exemplo:
Expressões entre colunas de cadeia de caracteres e literais de cadeia de caracteres ou variáveis usarão o agrupamento da coluna de cadeia de caracteres e, se o agrupamento da coluna diferenciar maiúsculas de minúsculas, a expressão será avaliada como sensível a maiúsculas e minúsculas sem precisar usar a
COLLATE
cláusula.Por padrão, as colunas recém-criadas que não especificam a
COLLATE
cláusula herdarão o agrupamento padrão do banco de dados. Nesse caso, você precisará especificar algo comoCOLLATE Latin1_General_100_CS_AS_KS_WS_SC
para todas as colunasVARCHAR
/NVARCHAR
que deseja que sejam sensíveis em todas as 4 categorias (além de suporte a caracteres suplementares).OBSERVE: Seja muito cauteloso ao usar um agrupamento binário (ou seja,
Latin1_General_100_BIN2
) para obter um agrupamento sensível a acentos/maiúsculas/kana/largura; binário Collations não são realmente sensíveis a maiúsculas e minúsculas.