DEV Community

Cover image for Garanta a Eficiência: Escolhendo entre tipos String no SQL
Alexandre
Alexandre

Posted on • Edited on

12 6 6 6 6

Garanta a Eficiência: Escolhendo entre tipos String no SQL

Garanta a eficiência, nova série fazendo mais sucesso que The Walking Dead, venha aprender como salvar seus strings no seu banco sql.

Conteúdo

1. Prólogo

Dando continuidade à nossa série, já abordamos os valores numéricos agora, chegou a hora de nos aprofundarmos nas strings. Neste artigo, exploraremos as diferenças entre os tipos VARCHAR e CHAR, além de fornecer uma compreensão detalhada sobre os conceitos de CHARSET e COLLATE, os quais você certamente já encontrou em seus bancos de dados, mas talvez ainda não tenha uma ideia clara de suas finalidades.

2. CHAR

O tipo de dado CHAR no MySQL é usado para armazenar strings de comprimento fixo.

Se o valor de uma string CHAR tiver um comprimento menor do que o comprimento especificado, os espaços em branco serão adicionados automaticamente ao final da string para preencher o espaço restante. Esses espaços em branco serão incluídos.

O tipo de dado CHAR é usado principalmente quando você precisa armazenar strings de comprimento fixo ou quando há um requisito específico para o tamanho da string. As comparações e pesquisas em colunas CHAR são mais rápidas do que em colunas VARCHAR porque não há necessidade de levar em consideração o tamanho variável.

3. VARCHAR

O tipo de dado VARCHAR armazena strings de comprimento variável, o que significa que o tamanho ocupado no armazenamento depende do comprimento real da string. Por exemplo, se você definir uma coluna VARCHAR(255) e inserir uma string de apenas 10 caracteres, ela ocupará apenas a quantidade de espaço necessária para armazenar esses 10 caracteres.

O tipo de dado VARCHAR pode ser mais eficiente em termos de armazenamento em comparação com o tipo de dado CHAR se a maioria das strings armazenadas tiver comprimentos variáveis. Isso ocorre porque o espaço alocado para armazenar a string é proporcional ao comprimento real da string e não ao comprimento máximo especificado.

O tipo de dado VARCHAR requer espaço adicional de armazenamento para registrar o comprimento real da string. Esse espaço extra varia de 1 a 2 bytes, dependendo do tamanho máximo especificado para a coluna VARCHAR.

4. CHARSET e COLLATE

CREATE TABLE strings (
    fixed100 CHAR(100), -- 100 bytes "Aaron     ..."
    var100 VARCHAR(100) -- 5 bytes + 1 Byte "Aaron"
);

SHOW CREATE TABLE strings;

CREATE TABLE `strings` (
  `fixed100` char(100) DEFAULT NULL,
  `var100` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

SELECT * FROM information_schema.CHARACTER_SETS ORDER BY CHARACTER_SET_NAME;
Enter fullscreen mode Exit fullscreen mode

Image description

CHARSET (utf8mb4)

O CHARSET utf8mb4 é uma configuração no MySQL que define o conjunto de caracteres utilizado para armazenar dados em colunas de texto. Nesse caso, o utf8mb4 refere-se a um conjunto de caracteres multibyte que suporta a codificação UTF-8.

  • utf8: Refere-se ao conjunto de caracteres UTF-8, que é um padrão universalmente aceito para representação de caracteres em várias línguas e scripts. O UTF-8 é capaz de representar uma ampla gama de caracteres e é amplamente utilizado em sistemas modernos.
  • mb4: É uma abreviação de "multibyte 4", indicando que o conjunto de caracteres suporta até 4 bytes por caractere. Isso permite a representação de caracteres que requerem mais de 2 bytes, como emojis e caracteres especiais de diferentes idiomas.

COLLATE (utf8mb4_0900_ai_ci)

A cláusula COLLATE é usada para definir a ordem de classificação de caracteres em operações de comparação e classificação de texto. No caso específico do COLLATE utf8mb4_0900_ai_ci, é uma sequência de configuração que define a ordem de classificação. Essas definições são as seguintes:

  • utf8mb4: É um conjunto de caracteres que suporta a codificação UTF-8 de caracteres multibyte. O UTF-8 é um padrão universalmente aceito para representação de caracteres e suporta uma ampla gama de caracteres de diferentes idiomas.
  • 0900: É um indicador da versão do algorítimo usado. Neste caso, 0900 refere-se à versão do Unicode Collation Algorithm (ou UCA). As versões mais recentes do MySQL podem introduzir atualizações e melhorias nos conjuntos de caracteres existentes.
  • ai: É uma abreviação de "Accent Insensitive" (insensível a acentos). Isso significa que as comparações de caracteres são realizadas sem levar em consideração os acentos. Por exemplo, as letras "á" e "a" seriam consideradas iguais.
  • ci: É uma abreviação de "Case Insensitive" (insensível a maiúsculas e minúsculas). Isso significa que as comparações de caracteres são realizadas sem levar em consideração a diferença entre letras maiúsculas e minúsculas. Por exemplo, as letras "A" e "a" seriam consideradas iguais.

5. Conclusão

Neste artigo, exploramos a diferença entre os tipos de string VARCHAR e CHAR no MySQL. Aprendemos que o CHAR é ideal para tamanhos fixos, enquanto o VARCHAR é mais adequado para tamanhos variáveis. Além disso, compreendemos o papel do CHARSET e COLLATE, permitindo personalizar a ordenação de texto.

Com esse conhecimento, podemos tomar decisões mais acertadas ao projetar nossas tabelas no MySQL, garantindo a eficiência e o desempenho ideais para nossas aplicações. A escolha inteligente dos tipos de string e configurações de charset/collate é crucial para um banco de dados otimizado e bem-sucedido.

API Trace View

Struggling with slow API calls? 👀

Dan Mindru walks through how he used Sentry's new Trace View feature to shave off 22.3 seconds from an API call.

Get a practical walkthrough of how to identify bottlenecks, split tasks into multiple parallel tasks, identify slow AI model calls, and more.

Read more →

Top comments (7)

Collapse
 
wldomiciano profile image
Wellington Domiciano

Muito bom o resumo. Parabéns!

Eu achei que a parte que vc explica o 0900 ficou confuso.

Neste caso, 0900 refere-se à versão 9.0.0 do conjunto de caracteres utf8mb4

Na verdade o 0900 refere-se à versão do Unicode Collation Algorithm (ou UCA).

Fonte: dev.mysql.com/doc/refman/8.0/en/ch...

Collapse
 
z4nder profile image
Alexandre

Vlww pelo feedback

Collapse
 
gabydp profile image
Gabrielly Pereira

Impecável!

Collapse
 
hivecommunity_ profile image
Hive Community

Top dms

Collapse
 
danielhe4rt profile image
Daniel Reis

Bom d+ primo.

Collapse
 
cherryramatis profile image
Cherry Ramatis

Ta ai algo que eu n tinha nenhum conhecimento sobre, artigo mto foda primo

Didatica foda

Collapse
 
canhassi profile image
Canhassi

muito bom!

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay