SQLShack (Português)

posted in: Articles | 0

neste artigo vamos rever o tipo de dados SQL varchar, incluindo uma definição básica e visão geral, diferenças de varchar(n), Suporte UTF-8, colação, considerações de desempenho e muito mais.

Dados desempenha um papel crucial em qualquer organização e um atributo pelo qual é definido é chamado de seu tipo de dados. Em palavras simples, o tipo de dados afirma que tipo de Dados qualquer objeto, variável ou expressão pode armazenar., Como um desenvolvedor SQL, ao criar uma tabela SQL, temos que entender e decidir que tipo de dados serão contidos por cada coluna de uma tabela. Como qualquer outra linguagem de programação, o SQL também suporta um gamute de tipos de dados que podem conter dados inteiros, dados de data e hora, dados de caracteres, etc. e permite-lhe definir tipos de dados próprios também. O SQL varchar é um dos tipos de dados mais conhecidos e mais utilizados do lote. Neste artigo, vamos percorrer diferentes facetas do servidor SQL varchar no servidor SQL.

abaixo está o contorno que vamos cobrir neste bloco.,

  1. Introdução ao tipo de dados varchar do servidor SQL no servidor SQL
  2. Utilização do varchar para grandes blocos de texto
  3. o que há de novo na antevisão do servidor SQL 2019 para o tipo de dados varchar?,
  4. Influência do agrupamento na varchar SQL no SQL Server
  5. suporte a UTF-8 com varchar no SQL Server 2019 CTP
  6. SQL Server varchar para conversões de dados e visualização de dados
  7. Armazenamento e considerações de desempenho usando o SQL Server varchar
  8. o Impacto no comprimento de cadeia de caracteres SQL varchar com funções CAST e CONVERT

Vamos seguir em frente e ver o mencionado em ação. o que é varchar em SQL?

como o nome sugere, varchar significa dados de caracteres que são variáveis., Também conhecido como caractere variável, é um tipo de dados de cadeia de comprimento indeterminado. Pode conter números, letras e caracteres especiais. Microsoft SQL Server 2008 (e acima) pode armazenar até 8000 caracteres como o comprimento máximo da cadeia usando o tipo de dados varchar. SQL varchar geralmente contém 1 byte por personagem e mais 2 bytes para a informação de comprimento. Recomenda-se a utilização do varchar como tipo de dados quando as colunas têm comprimento variável e os dados reais são muito inferiores à capacidade dada. Vamos mudar para SSMS e ver como o varchar funciona.,

o exemplo a seguir cria três variáveis (nome, sexo e idade) com varchar como o tipo de dados e valores diferentes sendo atribuídos a eles. Como é evidente a partir dos conjuntos de resultados mostrados abaixo, por padrão, o comprimento de cadeia de caracteres das colunas varchar SQL é 1 e ele retorna apenas o primeiro valor das variáveis(o resto da cadeia sendo truncado) quando nenhum comprimento de cadeia é passado para o tipo de dados varchar. A função len () é usada para determinar o número de caracteres armazenados na coluna varchar.

como SQL varchar(max) é diferente de varchar(n)?,

Existem alturas em que os programadores SQL (incluindo eu próprio) normalmente definem o tipo de dados varchar sem um comprimento, e subsequentemente, não são capazes de inserir registos de texto na tabela SQL, isto porque o servidor SQL atribui 1 espaço de caracteres como o valor por omissão para a coluna varchar que é definida sem qualquer comprimento. Em cenários práticos, varchar (n) é usado para armazenar o valor de comprimento variável como uma string, aqui ‘n’ denota o comprimento da string em bytes e pode ir até 8000 caracteres., Agora, vamos continuar e ver como podemos armazenar dados varchar SQL com um comprimento de cadeia na coluna de uma tabela SQL. Abaixo script cria a tabela Demovarcar com alguns dados nela. E a tela de resultados mostra registros de 7 funcionários com base em seus departamentos, idade, etc.

suponha que existe uma nova adição de um empregado na organização e nós, como programadores de dados SQL, teríamos de inserir este novo registo na tabela acima usando inserir a declaração SQL. Abaixo está um exemplo mostrado.,

1
INSERT INTO Demovarchar VALUES(‘Newton Hamilton’, ‘Isaac’,’M’,’Design Head’,69)

Oops, SQL Server encountered an error and terminated the statement saying string or binary data would be truncated., Isso ocorreu porque, a coluna LastName varchar (10) pode conter até 10 caracteres e aqui estamos tentando inserir um novo registro com comprimento de cadeia(‘Newton Hamilton’) que é claramente maior que 10 caracteres. Como uma correção rápida, podemos alterar a tabela e aumentar o tipo de dados da coluna varchar SQL, digamos para varchar(50) para inserir a nova linha. Execute o programa abaixo para alterar e inserir um novo registo na tabela., Além disso, você pode usar as funções LEN() e DATALENGTH() para determinar o número de caracteres e o tamanho de armazenamento em bytes, respectivamente, que são armazenados na coluna varchar.

observamos acima como podemos definir ou alterar o comprimento da cadeia de caracteres na coluna varchar SQL para satisfazer as necessidades de Negócio. No entanto, considere um cenário, onde não temos certeza do tamanho dos dados que vai ser carregado em nossas tabelas SQL, em tais circunstâncias, inspecionar e alterar o tamanho do tipo de dados para cada coluna não é uma escolha viável., Uma das opções para lidar com isso poderia ser definir o comprimento de cadeia de caracteres na barra superior na coluna varchar servidor SQL (desde que você tenha uma estimativa aproximada do comprimento da coluna de cadeia de caracteres).

um ponto importante a ter em consideração, podemos usar o comprimento de cadeia até varchar(8000) apenas como este é o número máximo de caracteres que o tipo de dados SQL varchar(n) pode conter. Assim, nos casos em que há chances de que o comprimento de cadeia da coluna varchar pode exceder 8000 bytes, usando varchar(8001) ou qualquer coisa maior resultará em um erro., One short example demonstrating this fact is shown below.

1
2

DECLARE @name AS varchar(8001) = ‘john parker d”souza’;
SELECT @name Name

SQL Server 2005 got around this limitation of 8KB storage size and provided a workaround with varchar(max)., It is a non-Unicode large variable-length character data type and can store a maximum of 2^31-1 bytes (2 GB) of non-Unicode characters.

Quando eu cheguei pela primeira vez para os conceitos de varchar(n) e SQL varchar, a pergunta comum como qualquer outro novato que eu tinha, era por que não podemos simplesmente declarar uma coluna do tipo de dados varchar(8500) ou superior, desde que nós temos varchar(max), que cuida de armazenamento de até 2GB e por que devemos usar varchar(<=8000) ou varchar(max)?, Eu tenho minhas respostas em uma pequena pesquisa que o servidor SQL usa página para armazenar dados e o tamanho de cada página é 8KB(excluindo cabeçalho da página, o tamanho das remoções). Se os dados a serem armazenados forem inferiores ou iguais a 8000 bytes, varchar(n) ou varchar(max) armazená-los em linha. No entanto, se os dados excederem o tamanho de 8000 bytes, então ele é tratado como um objeto grande(LOB) e eles não são armazenados em linha, mas em páginas LOB separadas(LOB_DATA)., A linha nesse caso só terá um ponteiro para a página de dados do LOB onde os dados reais estão presentes e o servidor SQL automaticamente atribui um indicador de excesso de fluxo para a página para manipular as linhas de dados. Em poucas palavras, se você sabe que os dados podem exceder 8000 byte, é uma melhor opção para usar varchar(max) como o tipo de dados.

podemos referir-nos ao DMV sys.dm_db_index_physical_stat para ver que tipo de alocação de páginas (IN_ROW_DATA data/ LOB_DATA / ROW_ OVERFLOW_DATA) é realizada., Você também pode verificar este link no caso de você querer uma explicação detalhada sobre como o servidor SQL exerce os limites de linha e página com os tipos de dados varchar(n) e varchar(max).vamos saltar rapidamente para o SSMS e ver como podemos usar varchar(max). Execute o seguinte script para inserir 1 registro onde o valor da coluna de StringCol em cada linha é de 15.000 caracteres B (ou seja, 15.000 bytes).

Uma limitação usando varchar(max) é que não é possível criar um índice que tem uma coluna varchar(max) como uma coluna de chave, em vez disso, é aconselhável fazer um índice de texto Completo na coluna.,

uma nota rápida a fazer – a partir daqui até a última parte deste artigo, mencionaremos varchar no lugar de varchar (n). Não o considere como o varchar com valor padrão = 1.

para aprender algumas diferenças mais interessantes entre varchar(n) e varchar(max) no servidor SQL, considere passar por este artigo, comparando VARCHAR(max) vs VARCHAR (n) Tipos de dados no servidor SQL.

suporte UTF-8 com o servidor SQL 2019 CTP

Antes de escavar o que a funcionalidade de antevisão do servidor SQL 2019 tem para oferecer ao SQL varchar, vamos ver rapidamente um tipo de dados mais interessante – ‘nvarchar’ primeiro., Como o servidor SQL varchar, temos o SQL nvarchar, o prefixo n Em nvarchar denota Unicode, ou seja, armazena dados Unicode e não-Unicode. A principal diferença entre varchar e nvarcar é a forma como eles são armazenados, varchar é armazenado como dados regulares de 8 bits(1 byte por caractere) e nvarcar armazena dados em 2 bytes por caractere. Devido a esta razão, nvarchar pode manter até 4000 caracteres e leva o dobro do espaço como SQL varchar. Você pode passar por este link para saber mais sobre nvarchar no servidor SQL.,

com a antevisão pública do SQL Server 2019, a Microsoft anunciou o suporte para codificação de caracteres UTF-8 para os tipos de dados existentes (varchar e char). Para aqueles que não estão cientes do UTF-8, ele significa formato de transformação Unicode e é uma codificação baseada em Unicode que suporta muitas línguas. O 8 em UTF-8 significa que ele usa 1 byte (8-bits) para representar um personagem na memória. Da mesma forma, UTF-16 usa 16 bits (2 bytes) para representar um personagem. Limitaremos o escopo deste novo servidor SQL 2019 CTP enhancement a ‘SQL varchar’ apenas neste artigo.,

Este acessório tem o seguinte impacto no SQL Server: é

  1. Melhora a compatibilidade de Dados

    Até que o SQL Server 2019 CTP, SQL tipo de dados varchar tinha capacidade para armazenar apenas os dados Não-Unicode e com esta visualização, podemos, agora, criar uma coluna varchar para armazenar dados Unicode em UTF-8 habilitado agrupamentos (_UTF8). UTF-8 é permitido nos tipos de dados varchar e é ativado ao criar ou mudar a colação de um objeto para uma colação com o sufixo UTF8. Isso ajuda a minimizar os problemas de conversão de caracteres.,

  2. redução no armazenamento e melhorias de desempenho

    UTF-8 suporte para o tipo de dados varchar fornece economias substanciais de armazenamento, dependendo do conjunto de caracteres em uso. Por exemplo, usando um UTF-8 habilitado agrupamento, alterar o tipo de dados de coluna nvarchar(20) varchar(20) apresenta uma queda significativa nos requisitos de armazenamento desde nvarchar(20) requer 40 bytes para armazenamento e varchar(20) precisa de 20 bytes para a mesma cadeia de caracteres Unicode.nota lateral importante-uma vez que esta melhoria ainda está em antevisão, podemos esperar mais progressões nesta frente no futuro próximo., No entanto, os tipos de dados existentes Unicode (UTF-16) (nchar, nvarchar e ntext) permanecem inalterados na antevisão do servidor SQL 2019.

    Collation with SQL varchar in SQL Server 2019 CTP

    Collation in SQL Server define configurações para determinar várias regras como Sensibilidade de caso, sensibilidade de acento, ordenação, tipos de caracteres e largura, etc. Compreender todas essas propriedades e como elas funcionam com seus dados se tornam muito importantes. A colação pode ser definida ao nível do servidor, banco de dados, expressão ou coluna., O UTF-8 suporta a colação ao nível de bases de dados ou ao nível de colunas no servidor SQL 2019 CTP e está activo quando criar ou alterar a colação de bases de dados ou colunas para uma colação com o sufixo UTF8.

    Se executar a consulta abaixo contra o servidor SQL 2019 CTP, poderá ver todas as colações suportadas pelo UTF-8 na sua instância do servidor SQL usando a função (FN_ helpcollations ()).,d=”284f85b8b5″>

1
2
3

SELECT Name, Description
FROM fn_helpcollations()
WHERE Name like ‘%UTF8’;

With SQL Server 2019 preview version, we can assign Unicode collations (UTF-8 supported) as well for SQL varchar columns using the COLLATE clause while declaring the varchar column., Desta forma, a colação específica é aplicada aos dados da coluna particular sem impactar o resto da base de dados.

Uma vez que estamos lidando com o tipo de dados varchar servidor SQL neste post, vamos ver como a colação coluna com o SQL varchar datatype funciona. Execute o código abaixo para alterar a colação da coluna varchar do servidor SQL de um tipo de colação para o sufixo _UTF8. Você pode ler mais sobre a coleta de banco de dados a partir daqui.,TE TABELA demovarcharcollate

(ID int PRIMARY KEY,
Descrição varchar(50) AGRUPAR LATIN1_GENERAL_100_CI_AS_SC NÃO NULO
);
ALTER TABLE demovarcharcollate
ALTERAR de Descrição de COLUNA varchar(50) AGRUPAR LATIN1_GENERAL_100_CI_AS_SC_UTF8 NÃO NULO;

Papel de SQL varchar em conversões de dados e visualização de dados

o SQL Server varchar é amplamente utilizado na exibição de dados na desejável formatos usando Converter e Elenco de funções no SQL Server., Os dados reais lidam com uma mistura de tipos de dados e têm de ser compatíveis uns com os outros (isto é, pertencem ao mesmo tipo de dados), antes de fazermos comparações com eles. O servidor SQL suporta conversões implícitas e explícitas.

  • Nota: Check out SQL CAST and SQL CONVERT function overview to get more information on how we can perform these conversions for data compatibility.

com uma necessidade incessante de formatação e visualização de dados na saída necessária, SQL varchar vem realmente útil., Como um desenvolvedor SQL eu mesmo, eu acho extremamente simples usar convert / cast com o tipo de dados varchar para fazer atribuições ou transformações em dados, especialmente para os campos de data.

I am using table FactInternetSales from Sample DB AdventureWorksDW2017 to show how this feature works. Você pode se referir a qualquer tabela com alguns campos datetime e money/float para a finalidade prática. O seguinte programa converte duas colunas datetime para tipos de varchar SQL com o estilo 102 e 107 para mostrar os dados no formato AAAA.mm.dd e Mon dd, aaaa, respectivamente., Além disso, a coluna SalesAmount com dinheiro como um tipo de dados é convertido para varchar e style 3 é aplicado para exibir o montante com vírgulas como mostrado na imagem abaixo. Além disso, digamos, nós gostaríamos de ver dados para as encomendas colocadas apenas no ano 2010, usando a função CAST para converter a coluna datetime para dados varchar, a comparação de string é realizada na cláusula onde. Você também pode ir sobre SQL convert date para encontrar mais informações sobre formatos de conversão de data e estilos.,

o Impacto no comprimento de cadeia de caracteres SQL varchar com funções CAST e CONVERT

o SQL Server armazena longa seqüência de dados comumente usado tipo de dados varchar e torna-se útil conhecer o esperado e o máximo de comprimentos das cadeias de caracteres para exibir os resultados na INTERFACE do usuário. Copiar e executar o código abaixo, onde estamos passando uma cadeia longa em uma variável varchar de comprimento não especificado (@demovarcar) e também em outra variável com um comprimento varchar definido (@demovarcharwithcast)., Microsoft leva 30 como o comprimento padrão para SQL Varchar (com comprimento varchar não especificado) no servidor SQL quando ele é usado com funções CAST e CONVERT. No nosso caso, mesmo que o comprimento da corda fosse 52, ele retornou 30 como o comprimento como mostrado na saída do último resultado.

um ponto importante a notar aqui é que quando um campo varchar de comprimento não especificado é criado, o comprimento padrão de tal campo é 1 (mostrado na cor vermelha abaixo)., Quando o comprimento do varchar não é especificado e é usado com funções de vazamento ou conversão, o molde ou conversão retorna n=30 como o comprimento de cadeia de caracteres padrão desta conversão (marcado em cor azul abaixo).,le’) COMO ‘LenOFStringPassed’

SELECIONE DATALENGTH(@demovarchar) COMO “DefaultVarcharLength’
SELECIONE DATALENGtH(CAST(@demovarcharwithcast COMO varchar(60))) COMO “VarcharLengthSpecifiedWithCast’
SELECIONE DATALENGTH(CAST(@demovarcharwithcast COMO varchar)) COMO ‘DefaultVarcharLengthWithCast’

Armazenamento e considerações de desempenho usando o SQL varchar

tipos de Dados como varchar, char e nvarchar, são utilizadas para armazenar dados de seqüência de caracteres no SQL Server., SQL varchar armazena comprimento de cadeia variável, enquanto SQL Char armazena comprimento de cadeia fixa. Isto significa que o servidor SQL varchar detém apenas os caracteres que lhe atribuímos e o char detém o espaço máximo da coluna, independentemente da cadeia de caracteres que contém.

devido ao comprimento do campo fixo, os dados são puxados diretamente da coluna sem fazer qualquer manipulação de dados e pesquisas de índice contra varchar são mais lentas do que a dos Campos char. CHAR é melhor do que VARCHAR desempenho sábio, no entanto, ele leva espaço de memória desnecessário quando os dados não têm um comprimento fixo., Então, nos casos em que o tamanho do disco não é um problema, é recomendado usar CHAR.

Em simples palavras, dizer que temos uma coluna com varchar(150) = ‘SQLShack’ – Isso vai demorar de 8 bytes(sqlshack) + 2 bytes para as informações de comprimento = 10 bytes na real e para de coluna char(150) = ‘SQLShack’ – Isto vai consumir toda a 150 bytes no disco, independentemente do que passar uma seqüência de caracteres. O exemplo abaixo mostra como CHAR usa o espaço máximo atribuído (150) para caber na string passada e como a coluna varchar usa apenas o espaço necessário.,

Bottom line is to use the data type that fits our need. Você pode usar varchar SQL quando os tamanhos da coluna variam consideravelmente, usar varchar (max) quando há chances de que o comprimento de cadeia pode exceder 8000 bytes, usar char quando os tamanhos da coluna são fixos e usar nvarchar se houver um requisito para armazenar dados Unicode ou multilingual.

conclusão

os tipos de dados desempenham um papel fundamental na concepção de bases de dados, mas são frequentemente negligenciados., Uma boa compreensão e utilização precisa dos tipos de dados garantem a natureza correta e o comprimento dos dados são povoados nas tabelas. A intenção desta dica é ajudá-lo a obter uma compreensão das características básicas e características do servidor SQL varchar, juntamente com seus aspectos de desempenho e armazenamento no servidor SQL. Também cobrimos avanços recentes no SQL varchar no SQL Server 2019 Preview.

Veja também

pode verificar estes outros artigos para continuar a aprender sobre tipos de dados SQL.,

  • Compreender o GUID de tipo de dados no SQL Server
  • tipos de dados Espaciais no SQL Server
  • Autor
  • Posts Recentes
Gauri é um Profissional de SQL Server e tem 6 anos de experiência de trabalhar com a global multinacional de consultoria e tecnologia de organizações. Ela é muito apaixonada por trabalhar em temas de servidores SQL como Azure SQL Database, SQL Server Reporting Services, R, Python, Power BI, Database engine, etc., Ela tem anos de experiência em documentação técnica e gosta de criação de tecnologia.ela tem uma profunda experiência em projetar soluções de dados e análises e garantir sua estabilidade, confiabilidade e desempenho. Ela também é certificada no SQL Server e passou certificações como 70-463: implementando armazéns de dados com o Microsoft SQL Server.,
Ver todos os posts por Gauri Mahajan

posts mais Recentes por Gauri Mahajan (ver todas)
  • Explorar o Azure Análise do Modelo de Serviços de Dados e de 4 de fevereiro de 2021
  • primeiros passos com o Azure Analysis Services – 13 de janeiro de 2021
  • Ligar Azure Databricks de dados para Alimentação BI ambiente de Trabalho – junho 1, 2020

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *