Criei um banco de dados onde um dos campos de uma tabela é definido como enum('M', 'B')
. A ferramenta que estou usando converte-o para um tipo variante . Gostaria de substituí-lo e tratá-lo como um caractere. Então a questão é, ele é armazenado como um caractere no banco de dados?
relate perguntas
-
Erro de cabeçalho do MariaDB
-
Erro 1046 Mariadb: nenhum banco de dados selecionado
-
Você ainda usa o MyISAM ou prefere o mecanismo de armazenamento Aria?
-
Como posso melhorar minha instrução SQL com resultados semanais com semana começando na quinta-feira ou em qualquer outro dia da semana?
-
Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?
Os valores ENUM são representados internamente como inteiros, onde cada valor de enumeração é representado por um índice inteiro começando em 1. Se o valor não corresponder a nenhum dos valores ENUM definidos, ele será armazenado como 0.
Considere o seguinte exemplo:
As seguintes consultas teriam o mesmo resultado
Resultado
Se você usar ENUM em um contexto numérico, o MariaDB o tratará como um inteiro:
Resultado
Veja o exemplo
Veja ENUM para explicação detalhada
Editar
Se o Modo SQL estrito não estiver habilitado, inserimos um valor inválido, por exemplo,
3
no nosso caso.Agora se eu correr,
SELECIONE m.* DE minhaTabela ONDE minhaCol = 0;
o resultado seria
Para verificar como
myCol
o valor do id 3 é armazenado, usamosO que resultará
Veja o exemplo
Ergest tem uma boa resposta; aqui vai um pequeno acréscimo:
Se houver até 255 opções,
ENUM
ocupa 1 byte; para mais opções (até o limite de 64K), ocupa 2 bytes.Ter mais do que algumas opções não é prático, pois você pode precisar
ALTER TABLE
adicionar uma nova opção para sempre.Note que a ordem das opções Enum é crítica para descobrir o valor numérico subjacente e para ordenar. Usando o exemplo de Ergest, 'M' < 'B' porque 'M' vem antes de 'B' (portanto tem um número de implementação menor). Isso difere de 'M' > 'B' em cada ordenação.