Zeros a esquerda no MySQL e tamanhos de tipos em colunas numéricas

Author: Ricardo Soares - Postado em: 12/10/2011
Relacionado as categorias: Diversos, Tecnologia | Leave a Comment 





A muito tempo atrás eu criava tabelas passando números para o tipo, então uma coluna do tipo bigint eu construía repassando “bigint(20)” no momento da construção da coluna, eu pensava que o numeral referenciava uma quantidade específica de bytes que a coluna utilizaria para armazenar os dados, porem recentemente tive que rever muuuuitos conceitos e identifiquei que não importava a quantidade de “bytes” que repassava no comando de construção o MySQL utilizava sempre a mesma quantidade de bytes no armazenamento e nada havia de diferença. Procurei explicações no manual e não encontrando procurei auxilio na comunidade, foi então que Barry Galbraith me auxiliou explicando que o parâmetro numérico é utilizando quando a coluna contem o parâmetro ZEROFILL, do contrário este parâmetro é ignorado pelo SGDB.

Para saber o tamanho em bytes que cada tipo utiliza e os limites superior e inferior dos números que podem ser armazenados eu sempre recorro ao manual dev.mysql.com/doc/refman/5.6/en/numeric-types.html

Para exemplificar abaixo uma sequência de comandos que pode ser utilizada para estudo.
mysql> CREATE DATABASE IF NOT EXISTS test;
mysql> USE test;
mysql> create table a ( i int(4) unsigned not null );
mysql> show columns from a;
mysql> SELECT * FROM information_schema.TABLES WHERE TABLE_NAME LIKE ‘a’;
mysql> insert into a values (123);
mysql> show columns from a;
mysql> select * from a;
mysql> SELECT * FROM information_schema.TABLES WHERE TABLE_NAME LIKE ‘a’;

mysql> alter table a modify i int(4) unsigned zerofill null;
mysql> show columns from a;
mysql> SELECT * FROM information_schema.TABLES WHERE TABLE_NAME LIKE ‘a’;
mysql> select * from a;
mysql> insert into a values (12356);
mysql> select * from a;

mysql> alter table a modify i int unsigned zerofill null;
mysql> show columns from a;
mysql> SELECT * FROM information_schema.TABLES WHERE TABLE_NAME LIKE ‘a’;
mysql> select * from a;

mysql> drop table a;













Comments

Leave a Reply






Últimos posts