Codificação de texto e collations no SQL Server
Este artigo apresenta uma visão detalhada sobre o que é “collation” no SQL Server e como o mesmo interfere na representação de textos.
O texto que se observa na tela do computador é composto de várias partes menores chamadas caractere, sendo essa a menor unidade de um texto. Textos também são chamados de “strings”. Em uma tradução rápida, “string” seria algo como “corda”, pois essa é a ideia de um texto: uma sequência de caracteres ligados por uma espécie de corda invisível.
O caractere que é visto na tela do computador é apenas um conjunto de pontos sendo desenhados pelo monitor, coordenado pelos dispositivos de vídeo e, é claro, um software. O software orienta o dispositivo baseado no caractere que precisa exibir. O mesmo vale para outros dispositivos, como impressoras.
Computadores, devido à natureza dos componentes que os constituem, são capazes de processar e armazenar apenas números. Isso significa que cada caractere é armazenado na memória ou no disco como um número, especificamente como um ou mais bytes, assim como qualquer outro dado no computador, como vídeos, imagens, etc. Um texto é composto por vários caracteres, o que significa dizer que um texto é composto por uma sequência de bytes.
O que é visto na tela do computador, ou na saída de uma impressora, são os glifos. Os glifos estão definidos em uma coleção de glifos chamada fonte, sendo que cada fonte permite que o caractere seja exibido em estilos diferentes. Baseado no byte (um número) que representa um caractere, o computador encontra o glifo associado e orienta o dispositivo sobre como desenhá-lo. Assim, armazenar, ler e transferir textos requer somente a manipulação dos bytes que os representam, e a exibição dos mesmos fica por conta das fontes instaladas nos computadores onde o texto está sendo manipulado.
A representação de textos começa neste ponto, onde a primeira dúvida que surge é: qual é o caractere que um determinado número representa? Então, na representação de textos, a primeira coisa que se precisa definir é um mapeamento entre um número e um caractere, como uma letra minúscula ou um sinal de pontuação. Para compreender collations, é necessário entender como os caracteres são representados e o que é ASCII, CODE PAGES e UNICODE. A melhor maneira de se compreender esses termos é voltando no tempo e observando como tudo começou.
Nos primórdios da computação, cada fabricante de software ou computador determinava seu próprio mapeamento. Quando os computadores começaram a se comunicar, isso se tornou um grande problema. Por exemplo, suponha que o software A usasse os números 1, 2, 3, 4 e 5 para representar os caracteres A, E, I, O e U, respectivamente, e que o software B usasse 5, 4, 2, 1 e 3 para A, E, I, O e U, respectivamente. Se o software A quisesse mandar a mensagem “OI” para o software B, então ele mandaria a sequência de números 4 (“O”) e 3 (“I”). O software B, ao receber a sequência “4 3”, iria exibir a mensagem “EU”, pois, para B, 4 é “E” e 3 é “U”. Era necessário criar um padrão que todos os fabricantes de software e hardware pudessem seguir, e assim garantir que os textos fossem exibidos corretamente.
Por volta de 1960, Bob Bemer, funcionário da IBM na época, percebeu que havia a necessidade de se estabelecer um padrão para troca de informações entre computadores. Então, ele propôs isso à American Standards Association (ASA, que futuramente se tornaria a American National Standards Institute, a ANSI). A partir de um comitê criado pela ASA, nasceu o American Standard Code for Information Interchange, ou o famoso ASCII, que é usado até hoje.
O ASCII mapeou 128 caracteres em uma tabela conhecida como tabela ASCII e, para cada caractere, determinou um número que o representava, onde o primeiro número era 0 e o último era 127. Por exemplo, a letra “A” (a maiúsculo) é representada pelo número 65, enquanto que o espaço é representado pelo número 32. Há outros caracteres de controle, que faziam mais sentido para época devido aos equipamentos em que eram usados (o ASCII não foi criado somente para computadores). Dessa forma, os fabricantes podiam implementar seus softwares baseados nesse padrão, e a troca de texto entre softwares que seguissem o padrão ASCII funcionaria corretamente.
No exemplo anterior, se o software A mandasse a mensagem “OI” para o software B, ele iria mandar a sequência de números 79 (equivalente a “O”) seguido do número 73 (o “I”). Ao receber a mensagem, o software B precisava encontrar na tabela ASCII qual era o caractere associado aos números 79 e 73. Como ambos os softwares usavam a mesma tabela (o mesmo padrão), os caracteres eram exibidos corretamente.
Code Pages e Character Sets
O padrão ASCII mapeou somente 128 caracteres, que para o Inglês era suficiente. Esses 128 números cabiam em apenas 7 bits (números de 0 a 127), porém os computadores da época já eram capazes de trabalhar com oito bits (um byte), o que permitia 256 números serem utilizados, isto é, o dobro de 128. Assim, os 128 números restantes, que compreendiam a faixa de números entre 128 e 255, ficaram “livres”. Isso significa que cada caractere gastava 1 byte (por isso esse tipo de representação é chamado de Single Byte Character Set, ou SBCS)."
[...] continue lendo...Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo