Um SET é um objeto string que pode ter
          zero ou mais valores, cada um deve ser escolhido de uma lista
          de valores permitidos especificados quando a tabela é criada.
          Valores de colunas SET que consistem de
          múltiplos membros são espeficados separados por virgula
          (‘,’). Uma consquência distop
          é que valores dos membros de SET não
          podem, eles mesmos, conter vírgula.
        
          Por exemplo, uma coluna especificada como SET("um",
          "dois") NOT NULL pode ter qualquer um destes
          valores:
        
"" "um" "dois" "um, dois"
          Um SET pode ter no máximo 64 membros
          diferentes.
        
          A partir da versão 3.23.51, espaços extras são
          automaticamente removidos dos valores de
          SET quando a tabela é criada.
        
          MySQL armazena valores SET numericamente,
          com o bit de baixa-ordem do valor armazenado correspondendo ao
          primeiro membro do conjunto. Se você recupera um valor
          SET em um contexto numérico, o valor
          recuperado tem o conjunto de bits correspondente aos membros
          que aparecem no valor da coluna. Por exemplo, você pode
          recuperar valores numéricos de uma coluna
          SET assim:
        
mysql> SELECT col_set+0 FROM nome_tabela;
          Se um número é armazenado em uma coluna
          SET, os bits que estão habilitados (com 1)
          na representação binária do número determinam o qual o
          membro no valor da coluna. Suponha uma coluna especificada
          como SET("a","b","c","d"). Então os
          membros terão os seguintes valores binários:
        
| SETmembro | Valor decimal | Valor binário | 
| a | 1 | 0001 | 
| b | 2 | 0010 | 
| c | 4 | 0100 | 
| d | 8 | 1000 | 
          Se você atribuir um valor 9 a esta coluna,
          que é 1001 em binário, o primeiro e o
          quarto valores membros do SET
          "a" e "d" são
          selecionados e o valor resultante é "a,d".
        
          Para um valor contendo mais que um elemento de
          SET, não importa em qual ordem os
          elementos são listados quando foram inseridos seus valores.
          Também não importa quantas vezes um dado elemento e listado
          no valor. Quando o valor é recuperado posteriormente, cada
          elemento aparecerá uma vez, listados de acordo com a ordem em
          que eles foram especificados na crição da tabela. Por
          exemplo, se uma coluna é especificada como
          SET("a","b","c","d"), então
          "a,d", "d,a" e
          "d,a,a,d,d" irão todos aparecer como
          "a,d" quando recuperados.
        
          Se você define um valor que não é suportado pela coluna
          SET, o valor será ignorado.
        
          Valores SET são ordenados numéricamente.
          Valores NULL vêm antes de valores
          SET não NULL.
        
          Normalmente, você realiza um SELECT em uma
          coluna SET usando o operador
          LIKE ou a função
          FIND_IN_SET():
        
mysql>SELECT * FROM nome_tabela WHERE col_set LIKE '%valor%';mysql>SELECT * FROM nome_tabela WHERE FIND_IN_SET('valor',col_set)>0;
Mas o seguinte também funciona:
mysql>SELECT * FROM nome_tabela 2 WHERE col_set = 'val1,val2';mysql>SELECT * FROM nome_tabela 3 WHERE col_set & 1;
A primeira desta instruções procura por uma correpondencia exata. A segunda por valores contendo o primeiro membro.
          Se você quer obter todos os valores possíveis para uma
          coluna SET, você deve usar: SHOW
          COLUMNS FROM nome_tabela LIKE nome_coluna_set e
          analizar a definição do SET 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.

