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
- 2 CHAR
- 3 VARCHAR
- 4 CHARSET e COLLATE
- 5 Conclusão
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;
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)
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...
Vlww pelo feedback
Impecável!
Top dms
Bom d+ primo.
Ta ai algo que eu n tinha nenhum conhecimento sobre, artigo mto foda primo
Didatica foda
muito bom!