Um ENUM
é um objeto string cujo valor
normalmente é escolhido de uma lista de valores permitidos
que são enumerados explicitamente na especificação da
coluna na criação da tabela.
O valor pode ser a string vazia (""
) ou
NULL
sob certas circunstâncias:
Se você inserir um valor inválido em um
ENUM
(isto é, uma string que não
está presente na lista de valores permitidos), a string
vazia é inserida no lugar como um valor especial de erro.
Esta string pode se diferenciar de um string vazia 'norma'
pelo fato de que esta string tem uo valor numérico 0.
Veremos mais sobre este assunto mais tarde.
Se um ENUM
é declarado
NULL
, NULL
é
também um valor permitido para a coluna, e o valor padrao
é NULL
. Se um ENUM
é decalarado NOT NULL
, o valor padrão
é o primeiro elemento da lista de valores permitidos.
Cada enumeração tem um índice:
Valores da lista de elementos permitidos na especificação da coluna são números começados com 1.
O valor de índice de uma string vazia que indique erro é
0. Isto significa que você pode usar a seguinte
instrução SELECT
para encontrar
linhas nas quais valores ENUM
inválidos forma atribuidos:
mysql> SELECT * FROM nome_tabela WHERE col_enum=0;
O índice de um valor NULL
é
NULL
.
Por exemplo, uma coluna especificada como ENUM("um",
"dois", "três")
pode ter quqlquer um dos valores
mostrados aqui. O índice de cada valor também é mostrado:
Valor | Indice |
NULL |
NULL |
"" |
0 |
"um" |
1 |
"dois" |
2 |
"três" |
3 |
Uma enumeração pode ter um máximo de 65535 elementos.
A partir da versão 3.23.51 espaços extras são
automaticamente deletados dos valores ENUM
quando a tabela é criada.
O caso da letra é irrelevante quando você atribui valores a
um coluna ENUM
. No entanto, valores
recuperados posteriormente da coluna terá o caso de letras de
acordo com os valores que foram usados para especificar os
valores permitidos na criação da tabela.
Se você recupera um ENUM
em um contexto
numérico, o indice do valor da coluna é retornado. Por
exemplo, você pode recuperar valores numéricos de uma coluna
ENUM
desta forma:
mysql> SELECT col_enum+0 FROM nome_tabela;
Se você armazena um número em um ENUM
, o
número é tratado como um índice, e o valor armazenado é o
membro da enumeração com este índice. (No entanto, este
não irá funcionar com LOAD DATA
, o qual
trata todas as entradas como strings.) Não é aconselhável
armazenar números em uma string ENUM
pois
pode tornar as coisas um pouco confusas.
Valores ENUM
são armazenados de acordo com
a ordem na qual os membros da enumeração foram listados na
especificação da coluna. (Em outras palavras, valores
ENUM
são ordenados de acordo com o seus
números de índice.) Por exemplo, "a"
vem
antes de "b"
para ENUM("a",
"b")
, mas "b"
vem antes de
"a"
para ENUM("b", "a")
.
A string vazia vem antes de strings não-vazias, e valores
NULL
vem antes de todos os outros valores
de enumeração. Para evitar resultados inesperados,
especifique a lista ENUM
em ordem
alfabética. Você também pode usar GROUP BY
CONCAT(col)
para ter certeza de que as colunas
estão ordenadas alfabeticamente e não pelo índice
numérico.
Se você quiser obter todos os valores possíveis para uma
coluna ENUM
, você deve usar: SHOW
COLUMNS FROM nome_tabela LIKE nome_coluna_enum
e
analizar a definição de ENUM
na segunda
coluna.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.