Fala pessoal, tudo bem?
Vamos falar sobre tipo de dados? (Data Type)
Você, que está começando, sabe os tipos de dados que podem ser usados para armazenar suas informações?
O SQL SERVER nos dá diversas opções de definições de dados, porém não é por que um tipo de dado suporta o conteúdo que você quer armazenar que ele é o ideal, por exemplo, de maneira genérica, não há por que eu ter uma coluna com tipo de dado que aceite texto se eu só irei armazenar datas. Existem diversas razões que justifiquem isso, mas podemos destacar as principais como: Queda de performance em determinadas operações e má utilização de espaço em disco e memória.
É importante que você tenha isto em mente, digo isso pois no início da minha carreira não foi destacado para mim tal importância, somente se falava em questão do espaço em disco, o que em alguns cenários não fica tão evidente, ainda assim, acredite, tente sempre definir os objetos com os melhores tipos de dados, seja na definição da tabela, variáveis, parâmetros de funções, procedures, etc.
Alguns fatos sobre a importância deste mapeamento:
- O SQL SERVER leva em consideração vários fatores para estimar a quantidade de memória que será disponibilizada para execução de uma query e o tipo de dados é um destes fatores. Se a consulta está consumindo muita memória desnecessariamente, esta memória poderia estar sendo utilizada por outros recursos. A falta de memória pode gerar leituras em disco, o que é mais lento do que só consultando a memória, então cuide bem da memória, ela deve ser sua melhor amiga.
- O espaço que é gasto para armazenar um dado pode ser duplicado, triplicado e até mais, tudo vai depender da quantidade de índices que tem em sua tabela, pois para cada índice que é criado, são gerados novas páginas de dados, isto porque cada índice pode ter uma estrutura e ordenação diferente.
Abaixo, descreverei somente os tipos de dados mais usados, na maior parte dos casos devem ser suficientes para você modelar seu banco e orientar quem está começando:
Tipos de dados que armazenam caracteres do tipo texto, números, pontos, traços entre outros:
OBS: Dentro dos parênteses (n), especificamos o limite máximo de caracteres, o número máximo para declaração do campo é de 8000, porém caso eu queira gravar algo maior que 8000 caracteres devemos declarar como (MAX) sendo possível armazenar até 2GB de informações!
Data Type: CHAR (n) Formato: N/A Limite: (n) Armazenamento: (n) Descrição: A quantidade de bytes será igual a (n), ou seja, se defini o campo como char(30), o campo SEMPRE irá ocupar 30 bytes, independente se forem preenchidos somente 1 caractere.
Data Type: VARCHAR (n) Formato: N/A Limite: (n) Armazenamento: 2 bytes + quantidade de caracteres preenchidos. Descrição: 2 bytes + 1 byte por caractere, ou seja, se defini como varchar(30) e preenchi somente 1 caractere ele ocupará um total de 3 bytes. (2 bytes por ser varchar + 1 byte do único caractere preenchido).
Curiosidades:
Caso na declaração de parâmetros, variáveis ou na criação de uma tabela, não especificarmos o valor de (n) o SQL irá considerar somente 1 caractere, porém, caso façamos uma conversão em uma instrução de consulta, o SQL irá considerar até 30 caracteres.

Tipo de dados para armazenar DATAS:
Data Type: Date Formato: AAAA-MM-DD Limite: 0001-01-01 a 9999-12-31 Armazenamento: 3 bytes. Descrição: Ocupam sempre 3 bytes independente da data inserida.
Data Type: Datetime Formato: AAAAA-MM-DD hh:mm:ss[.nnn] Limite: 1753-01-01 a 9999-12-31 23:59:59.997 Armazenamento: 8 bytes. Descrição: Ocupam sempre 8 bytes independente da data inserida.
Tipo de dado inteiro que aceita somente 0 e 1 e NULL
(Verdadeiro e falso):
Data Type: Bit Formato: N/A Limite: 0,1 e NULL Armazenamento: 1 a 8 colunas 1 byte Descrição: O armazenamento funciona de maneira diferente, a cada 8 colunas ou menos são gastos apenas 1 byte, ou seja: 1 a 8 colunas – 1 byte 9 a 16 colunas – 2 bytes E assim por diante.
Curiosidades:
Caso tentamos converter ‘TRUE’ direto para bit é convertido para o valor 1 e ‘FALSE’ em 0.

Caso tentamos converter um valor inteiro qualquer diferente de 0 para bit, retornará sempre 1.

Tipo de dados para armazenar números inteiros:
Data Type: INT Formato: N/A Limite: -2.147.483.648 a 2.147.483.647 Armazenamento: 4 bytes Descrição: Ocupam 4 bytes de armazenamento, independente do valor inserido.
Data Type: BIGINT Formato: N/A Limite: -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 Armazenamento: 8 bytes Descrição: Ocupam 8 bytes de armazenamento, independente do valor inserido.
Tipo de dados para armazenar decimais, como valores financeiros entre outros:
OBS: Dentro do parêntese (p,s), especificamos em ordem precisão e escala, o número máximo para precisão é de 38 números. (à esquerda da vírgula)
Data Type: DECIMAL (p,s) / NUMERIC (p,s) Formato: N/A Limite: (p,s) Armazenamento: 5 a 17 bytes Descrição: Irá ocupar de acordo com a precisão definida. 1 a 9 – 5 bytes 10 – 19 – 9 bytes 20 – 28 – 13 bytes 29 – 38 – 17 bytes
É isso pessoal, até a próxima!
Contribuição: Igor Santos.
Referências:
CHAR E VARCHAR – https://docs.microsoft.com/pt-br/sql/t-sql/data-types/char-and-varchar-transact-sql?view=sql-server-2017
DATE E DATETIME – https://docs.microsoft.com/pt-br/sql/t-sql/functions/date-and-time-data-types-and-functions-transact-sql?view=sql-server-2017
BIT – https://docs.microsoft.com/pt-br/sql/t-sql/data-types/bit-transact-sql?view=sql-server-2017
INT E BIGINT – https://docs.microsoft.com/pt-br/sql/t-sql/data-types/int-bigint-smallint-and-tinyint-transact-sql?view=sql-server-2017
DECIMAL E NUMERIC – https://docs.microsoft.com/pt-br/sql/t-sql/data-types/decimal-and-numeric-transact-sql?view=sql-server-2017
Deixe um comentário