DEV Community

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

Posted on • Updated on

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.

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!