Os parênteses em campos numéricos do MySQL
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!
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!
gostei do artigo...parabéns...
13/06/2007 12:13am
(~17 anos atrás)
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
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)
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!!
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)