0

Os parênteses em campos numéricos do MySQL

criado por Celso Endo em 22/01/2007 4:39am
Vejo muitas pessoas que confundem os parênteses dessas colunas númericas (TINYINT, SMALLINT, MEDIUMINT, INT e BIGINT) do MySQL com os parênteses de colunas de caracteres (CHAR e VARCHAR). Admito que no começo, eu também me confundia com isso, até o dia que resolvi pesquisar na documentação do MySQL, fazer alguns testes, e vi que não era bem como eu pensava ser.

Como ainda hoje muitas pessoas se questionam com isso e tive/tenho que fazer muitas entrarem na documentação do MySQL para provar por A+B que não funcionam da mesma forma que CHAR e VARCHAR, então resolvi criar esse artigo, que parece ser uma coisa simples (e é!!!), mas que anda confundindo muitas pessoas.

Para quem já sabe o verdadeiro significado desses parênteses, convido-os a lerem mesmo assim e me corrijam se eu também estiver errado! :)

E para quem pensava até hoje que os parênteses significam o valor máximo a ser armazenado, ou o número de dígitos máximo, leiam e vejam a verdade!

Comentários:

Mostrando 1 - 4 de 4 comentários
gostei do artigo...parabéns...
13/06/2007 12:13am (~9 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 (~9 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 (~9 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 (~9 anos atrás)

Novo Comentário:

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