Desmistificando o Collation no SQL Server – Parte 1

Oi! Tudo certo!?

Já faz um bom tempo desde o último post, e estou devendo algumas coisas à vocês. Mas estou revendo alguns pontos e tem muita coisa e muito assunto que desejo postar aqui, então em breve creio que irei conseguir me desculpar! 🙂

Recentemente tive a oportunidade de falar de um assunto que parece não ser muito grande… Mas que pode causar muita dor de cabeça: COLLATIONS!

Pensando nisso, vou iniciar mais uma série “Desmitificando”, agora sobre collations. Espero que possa ser útil. A série “Desmitificando o SELECT” também será incrementada com posts novos!

Qual o meu objetivo com essa série?

Vocês já deve ter se deparado com aqueles erros de incompatibilidade de collations… Pois bem geralmente a ação é usar um comando “COLLATE” e está tudo certo.

  • Mas você sabia que existe uma precedência de collations?
  • Sabia que nem sempre collations diferentes vão resultar erros?
  • Sabia que você pode perder dados ao converter um collation para outro?
  • Sabia que o plano de execução gerado para sua query pode ser bem ruim, por conta do collation?

Muitas perguntas né!? E ainda tem  mais… Mas vamos direto ao ponto:

O objetivo desta série é que você domine o collation e saiba exatamente o que está fazendo e o que o SQL Server está fazendo por debaixo dos panos…

Mas, até lá, vamos precisar alinhar umas coisas antes sobre textos e computadores, pois se não fosse por isso, não havia necessidade de collations, ok!? Então senta aí, e vamos conversar um pouco…

Agenda da série (pode ser alterada a cada post)

  • Introdução [Você está aqui]
  • O que são collations
  • Collations do Windows vs Collations do SQL
  • Precedência de Collations
  • Tertiary Weights
  • Query Optimizer e Collations!

TEXTOS E COMPUTADORES

Um número em qualquer lugar do mundo significa a mesma coisa. O número 5 significa a mesma coisa, tanto no Brasil como no Japão, etc. O que pode mudar é a representação. O símbolo ‘5’ pra gente já é suficiente. Com datas, também não é diferente: Se você adicionar 1 dia à data ‘1 de janeiro de 2014’, você sempre vai ter ‘2 de janeiro de 2014’, independente do lugar em que você se encontra! Com textos isso já não é assim, tão simples…

Textos são como nós identificamos e representamos as coisas. As palavras e as letras são usadas por uma determinada cultura, povo, sociedade (chame do que quiser), mas o fato é que dependendo do lugar em que você se encontra no mundo, as regras de escrita podem mudar: Os símbolos para representar as letras (já ouviu falar em acento no S?) são o exemplo mais prático que você pode ter para ilustrar isso…

Computadores são capazes de representar textos e também lidar com essas diferenças. Mas precisam ser informados onde estão, qual o idioma, a região, etc. Sozinhos eles não conseguem sair do outro lado…

Mas os computadores não entendem textos. Apenas números. Um computador, em sua simplicidade é capaz de fazer somente algumas operações básicas, que envolvem números somente! Somar, multiplicar, subtrair… Também podem ler e gravar “dados” na memória… Mas tudo isso usando números somente! Tudo construído em volta de regras matemáticas e com ajuda da eletrônica, que fazem as coisas darem certo.

Também, os computadores são capazes de fazer algo interessante com uma pequena ajuda: Desenhar na tela! Na verdade, quem faz isso é um dispositivo ultra-moderno chamado “Monitor”. Esse cara recebe sinais de uma coisa chamada “placa de vídeo” e sai ativando pontos na tela que exibem a luz em uma determinada cor, conforme lhe é orientado. Mas, o monitor e a placa de vídeo não sabem que estão desenhando letra ‘a’ ou ‘b’… Eles sabem que estão ativando e desativando pixels (os pontinhos, que tem um monte deles)… Esses pixels juntos para nós tem algum significado… Para eles são meros pontinhos que podem ser ativados com uma determinada cor… Para eles, o ponteiro do mouse a letra ‘a’ não passam de pontos na tela!

Textos são compostos por elementos menores; Coisinhas chamadas “caractere”. Um caractere é a menor unidade que forma um texto:

  • A letra ‘A’
  • A letra ‘z’
  • O algarismo 6, o algarismo 1
  • Cada letra do alfabeto é um caractere diferente
  • Um “A” é um caractere, um “a” é outro caractere, um “á” outro, e um “Á” outro: Cada variação de uma mesma letra é um caractere diferente.
  • Os sinais de pontuação (! . , ” @ #, etc.)
  • O espaço (sim! o espaço é um caractere), a tabulação

Entendeu!? Cada coisinha dessa é um caractere e um conjunto de 0 ou mais caracteres formam o que chamamos de STRING, que é a mesma coisa que texto.

Uffaaa!!! Muito assunto né!? Mas se você chegou até aqui é porque acha esse assunto tão legal quanto eu! Vai ver que é de suma importância entender bem a introdução para dominar COLLATIONS! No próximo post vamos continuar a introdução… Até lá!