Como usar os tipos de dados char, nchar, varchar e nvarchar no SQL Server
Tipos de dados char, nchar, varchar e nvarchar – SQL Server
Os tipos de dados CHAR, NCHAR, VARCHAR e NVARCHAR são usados para armazenar dados de texto no SQL Server. Cada um é empregado em uma situação distinta, e saber escolher o tipo de dados adequado pode afetar a performance e o uso de espaço no banco de dados.
Neste tutorial vou mostrar cada um desses tipos, suas diferenças e quando usá-los.
Tipos de Texto no SQL Server
Os tipos nchar e nvarchar permitem armazenar caracteres Unicode, ao passo que char e varchar não o permitem – é até possível armazenar Unicode com esses tipos, mas por meio de alguns “truques” no código. Porém, os tipos nchar e nvarchar ocupam o dobro de espaço de armazenamento. Desta forma, recomenda-se utilizá-los apenas caso seja necessário suporte a Unicode na tabela – o que é bastante comum.
Os tipos char e nchar são tipos de tamanho fixo, o que significa que eles reservam espaço de armazenamento para a quantidade de caracteres que foi especificada em suas declarações, mesmo que o espaço não seja totalmente utilizado. Por exemplo, podemos criar um campo char ou nchar para 20 caracteres mas armazenar apenas 15 – os outros 5 que ficaram vagos irão ocupar espaço da mesma maneira.
Recomenda-se usar esses tipos caso os dados armazenados sempre ocupem o tamanho máximo especificado na declaração da coluna.
Já os tipos varchar e nvarchar são tipos de tamanho variável, de modo que o espaço ocupado corresponderá à quantidade de caracteres que efetivamente são armazenados + 2 (2 bytes de registro do comprimento – overhead), independente do tamanho máximo declarado.
Características dos tipos CHAR, NCHAR, VARCHAR e NVARCHAR
CHAR
- Descrição: Armazena dados de texto com comprimento fixo.
- Tamanho: O comprimento é definido ao criar a coluna e todos os valores terão exatamente esse tamanho – ou seja, o comprimento é fixo. Espaços em branco são adicionados para preencher o comprimento se necessário.
- Uso: Dados de tamanho fixo, como códigos de produtos ou identificadores.
NCHAR
- Descrição: Similar ao CHAR (também comprimento fixo), mas armazena dados de texto em formato Unicode.
- Tamanho: Cada caractere ocupa 2 bytes, permitindo armazenar caracteres de múltiplos idiomas.
- Uso: Usado para dados de texto internacionalizados ou quando é necessário suportar vários idiomas.
VARCHAR
- Descrição: Armazena dados de texto com comprimento variável.
- Tamanho: O comprimento máximo é definido ao criar a coluna, mas apenas o espaço necessário para armazenar o valor real é utilizado. Ou seja, ocupa espaço de acordo com o valor armazenado na coluna.
- Uso: Ideal para colunas onde os tamanhos dos valores podem variar significativamente, como nomes, descrições ou endereços.
NVARCHAR
- Descrição: Similar ao VARCHAR, mas armazena dados de texto em formato Unicode.
- Tamanho: Cada caractere ocupa 2 bytes, semelhante ao NCHAR, mas o espaço é utilizado de forma mais eficiente para comprimentos variáveis.
- Uso: Usado para dados de texto internacionalizados ou quando é necessário suportar vários idiomas, com comprimentos variáveis.
Performance dos tipos de texto
Com relação à performance desses tipos de texto no SQL Server, temos que:
- CHAR e NCHAR podem ser mais rápidos para acesso em colunas onde todos os valores têm tamanho fixo.
- Já os tipos VARCHAR e NVARCHAR são mais eficientes em termos de espaço para colunas onde os tamanhos dos valores variam.
Exemplos de uso
1. Tipos CHAR e NCHAR
Criamos uma tabela com dois campos, um do tipo CHAR e outro do tipo NCHAR
CREATE TABLE ExemploCharNChar ( Codigo CHAR(5), Item NCHAR(10) );
Inserimos uma linha de teste nessa tabela. Para o campo “Item” usarei um dado em outro idioma, inclusive com outro conjunto de caracteres – no caso, caracteres japoneses.
Note o caractere ‘N’ que precede o valor a ser armazenado, para indicar ao SQL Server que se trata de um valor Unicode.
INSERT INTO ExemploCharNChar (Codigo, Item) VALUES ('012', N'ピザ');
Consegue descobrir que item foi inserido?
E realizamos uma consulta para ver o dado inserido.
SELECT * FROM ExemploCharNChar;
Resultado:
Codigo Item 012 ピザ
2. Tipos VARCHAR e NVARCHAR
Agora vamos criar outra tabela também com dois campos, um do tipo VARCHAR e outro do tipo NVARCHAR
CREATE TABLE ExemploVarcharNVarchar ( Descricao VARCHAR(50), Pedido NVARCHAR(100) );
Inserimos uma linha de teste nessa tabela. Para o campo “Pedido” usarei novamente um dado em idioma japonês, desta vez com mais caracteres.
INSERT INTO ExemploVarcharNVarchar (Descricao, Pedido) VALUES ('Prato Típico Italiano', N'ピザが食べたい.');
E realizamos a consulta para ver o dado inserido.
SELECT * FROM ExemploVarcharNVarchar;
Resultado:
Descricao Pedido Prato Típico Italiano ピザが食べたい.
Importante
Uma dica importante é a seguinte: Hoje em dia, os sistemas operacionais e plataformas de desenvolvimento usam internamente o sistema Unicode.
Sendo assim, se usarmos os tipos nvarchar em vez de varchar, e nchar em vez de char, evitamos que ocorram conversões de codificação sempre que operaçoes de leitura ou escrita forem realizadas no banco de dados.
Essas conversões consomem recursos do servidor e podem ocasionar erros, ainda que raramente, além do que não é fácil recuperar de erros de conversão em uma tabela.
Conclusão
Neste tutorial estudamos os tipos de dados CHAR, NCHAR, VARCHAR e NVARCHAR no SQL Server, suas diferenças e exemplos de uso.
Ao escolher o tipo de dados para colunas de texto, considere o tamanho dos dados que você espera armazenar, a necessidade de suporte a múltiplos idiomas e a eficiência de armazenamento. Para texto que precisa ser armazenado em múltiplos idiomas, use os tipos NCHAR ou NVARCHAR. Para texto de tamanho fixo, use CHAR, e para tamanho variável, use VARCHAR.
Lembre-se:
- Usamos CHAR e NCHAR quando o comprimento dos dados for fixo.
- Usamos VARCHAR e NVARCHAR quando o comprimento dos dados for variável.
- A letra ‘N’ antes dos tipos Unicode (NCHAR e NVARCHAR) indica que eles suportam caracteres Unicode.
* ピザ significa “pizza” e ピザが食べたい significa “quero comer pizza” (“piza ga tabetai”).
Colabore com a Bóson Treinamentos
Ajude o canal adquirindo meus cursos na Udemy:
- Bancos de Dados com MySQL Básico: https://bit.ly/35QdWE4
- Lógica de Programação com Português Estruturado: https://bit.ly/3QKPn22
- Programação em Python do Zero: https://bit.ly/python-boson
Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: https://www.amazon.com.br/shop/bosontreinamentos
Escreva um comentário