Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Sugestão] Errata Sobre Case Sensitive e Accent Sensitive do Bancos de Dados SQL Server

Olá, pessoal.

Como DBA sempre buscando conhecimento, acho muito importante trazer um ponto importantíssimo.

Em algumas aulas do curso (até agora, vi nas aulas "Consultando dados de uma tabela" e "Limitando a saída da consulta") o professor está passando uma informação incorreta.

Nelas, o professor afirma que no SQL Server não há distinção de maiúsculas e minúsculas no nome dos campos, tabelas e comandos como SELECT. Acontece que isso não é completamente verdade.

De fato os comandos SQL (SELECT, UPDATE, INSERT, FROM, CREATE, etc) são Case Insensitive (não diferenciam maiúsculas e minúsculas), isto é, realizar um SELECT * FROM tabela, vai retornar a mesma coisa que SeLecT * FRom tabela. Mas o mesmo não se pode dizer das tabelas e campos.

Quando se cria um banco de dados, na etapa Server Configuration (Configuração do Servidor), há uma aba chamada Colação (Collation). Lá, é possível escolher a colação do servidor, que é um conjunto de regras que determina como os dados são comparados e ordenados em um banco de dados.

Quando instalamos uma instância do SQL Server, por padrão (de acordo com nossa localização do Brasil) é instalado no formato SQL_Latin1_General_CP1_CI_AS. Mas o que isso quer dizer? Isso significa o seguinte:

  • SQL: Indica que esta collation é específica para o SQL Server;
  • Latin1_General: Refere-se ao conjunto de caracteres utilizado. Neste caso, é baseado no conjunto de caracteres Latin1 (também conhecido como ISO 8859-1), que inclui caracteres alfanuméricos básicos, acentos e alguns caracteres especiais;
  • CP1: Indica a página de código (code page) utilizada. A página de código 1 (CP1) é a página de código padrão associada ao conjunto de caracteres Latin1;
  • CI: Significa "Case Insensitive", o que indica que a collation é insensível a maiúsculas e minúsculas. Isso significa que a ordenação e comparação de strings não levarão em conta a diferença entre maiúsculas e minúsculas;
  • AS: Significa "Accent Sensitive", o que indica que a collation é sensível a acentos. Portanto, a ordenação e comparação de strings levarão em consideração a diferença entre caracteres acentuados e não acentuados;

Portanto, de fato com a configuração padrão (a SQL_Latin1_General_CP1_CI_AS), as tabelas e colunas se tornam Case Insensitive, isto é, as tabelas CONSUMO e Consumo e consumo são referem-se à mesma tabela. Mas se for escolhido a versão SQL_Latin1_General_CP1_CS_AS, os nomes das tabelas e colunas serão Case Sensitive, isto é, a tabela CONSUMO é diferente da tabela consumo e diferente da tabela Consumo (tu pode ter uma tabela chamada CONSUMO, outra Consumo e outra consumo).

Explicando o Accent Sensitive, é a mesma lógica para acentos. O Accent Sensitive indica que a palavra maçã é diferente da maça que é diferente da macã e diferente da maca para a buca, por exemplo. Se fosse Accent Insensitive, então uma busca por maca irá retornar resultados como maçã, maça, macã e maca, por exemplo.

Acho muito importante especificar e deixar isso muito claro.

2 respostas
solução!

Oi, Augusto! Como vai?

É importante, sim, relevar que uma diferença na collation pode ocasionar mudanças em como o SQL Server lê as queries - muito bem pontuado!

Vou levantar esse ponto com a equipe. Desse modo podemos nos atentar aos próximos cursos.

Obrigada pelo feedback! Se outra sugestão surgir, sinta-se à vontade para postar.

Abraços!

Muito bom. Obrigado pela empatia em compartilhar isso com a comunidade.

Vou estudar sobre Collations.