0

Os parênteses em campos numéricos do MySQL

criado por Celso Endo em 22/01/2007 4:39am
Conclusão:

Se você utiliza uma coluna definida como INT(1) para servir como uma "flag" (por exemplo, 0 para registros inativos e 1 para ativos), podem continuar usando sem problemas, mas lembrem-se: o (1) não significa que você só pode armazenar dígitos de 1 caractere, se você "inputar" o valor 50320120 ele será armazenado também!

Uma observação: se você setar o atributo ZEROFILL para essas colunas, aí realmente esses parênteses poderão ter alguma utilidade (ou não!). Se você configurar uma coluna INT(5) com o atributo ZEROFILL e armazenar qualquer valor numérico abaixo de 5 caracteres, ao invés do MySQL preencher o restante com espaços, irá preencher com zeros (obviamente à esquerda, sempre!). Ou seja, se você armazenar o valor 342, será armazenado 00342. MAS ATENÇÃO!!! Mesmo com o atributo ZEROFILL, o (5) da definição da coluna continua NÃO SENDO limitador de caracteres, ou seja, você poderá armazenar o valor 20321874 sem problemas, a única diferença é que esse valor não tera zeros à esquerda, por possuir mais de 5 dígitos.

Resumindo, esses parênteses poderiam ser descritos como: "O valor que estiver entre eles, será o espaço mínimo ocupado por cada registro dessa coluna, mas NUNCA um limite de valores ou caracteres"

Para saber os valores mínimos e máximos dessas colunas:
http://dev.mysql.com/doc/refman/4.1/en/numeric-types.html

Espero que esse artigo sirva para compreender um pouco mais do conceito do MySQL!

Comentários:

Mostrando 1 - 4 de 4 comentários
gostei do artigo...parabéns...
13/06/2007 12:13am (~17 anos atrás)

Pablo Dias disse:
como disseste: "Se você utiliza uma coluna definida como INT(1) para servir como uma "flag" ... podem continuar"

eu acho que para definir uma coluna como "flag" que receberá apenas um valor, esta não é a melhor maneira, porque um campo INT requer 4 bytes para armazenar quaisquer valores dentro do range permitido.
se é pra armazenar somente um número, por exemplo, é melhor utilizar o TINYINT que requer somente 1 byte, além de ter um range (unsigned) de 0 a 255. o que vale também pra tabelas de poucos registros.
claro, tudo isso pensando em uma larga escala de dados. somando, somando.. podem chegar a megas de diferença, ao final.

CHAR(1) também pode ser utilizado como "flag", por necessitar de apenas 1 byte. o lado ruim: só vai aceitar de 0 a 9, enquanto, o lado bom: pode aceitar quaisquer caracteres, não somente numeros. ótimo para "i" (inativo) e "a" (ativo), que dão uma "humanizada" nas informações.

ps.: tem gente que defende o "set" e "enum". eu acho de extremo mau-gosto e também muita mão-de-obra cada vez que se deve adicionar uma opção.

no mais, ótimo artigo.
já tive essa dúvida sobre esses numerozinhos entre parenteses. haha

abraço,
Pablo Dias
25/05/2007 5:51pm (~17 anos atrás)

Trambulhao disse:
Eu também pensava dessa forma. Entre o CHAR e VARCHAR já sabia, mas sobre o INT só descobri a pouco tempo, por acaso. Precisando uma solução para ocupar com zero em INT(5) Tipo: 00001, 00002 em vez de: 1, 2... fui pesquisar o manual do MySql, aí que descobri também.

Muito bom o artigo!!
15/05/2007 12:57pm (~17 anos atrás)

Camarada, muito bom o seu artigo, eu confesso que não sabia disso assim como a maioria da galera...
04/05/2007 6:27am (~17 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)