Qual é o tamanho da coluna int(11)
no mysql em bytes?
E Valor máximo que pode ser armazenado nessas colunas?
mysql
antes da minha chegada. Thx
Qual é o tamanho da coluna int(11)
no mysql em bytes?
E Valor máximo que pode ser armazenado nessas colunas?
mysql
antes da minha chegada. Thx
Respostas:
Um INT
sempre terá 4 bytes, independentemente do tamanho especificado.
TINYINT
= 1 byte (8 bits)SMALLINT
= 2 bytes (16 bits)MEDIUMINT
= 3 bytes (24 bits)INT
= 4 bytes (32 bits)BIGINT
= 8 bytes (64 bits).O comprimento apenas especifica quantos caracteres devem ser preenchidos ao selecionar dados com o cliente de linha de comando mysql. 12345 armazenado como int(3)
ainda será exibido como 12345, mas, se fosse armazenado int(10)
, ainda seria exibido como 12345, mas você teria a opção de preencher os cinco primeiros dígitos. Por exemplo, se você adicionouZEROFILL
incluísse, seria exibido como 0000012345.
... e o valor máximo será 2147483647 (assinado) ou 4294967295 (não assinado)
INT ( x ) fará diferença apenas em termos de exibição , ou seja, para mostrar o número em dígitos x , e não restrito a 11. Você o emparelha usando ZEROFILL
, o que precederá os zeros até corresponder ao seu comprimento.
Portanto, para qualquer número de x emINT(x)
se o valor armazenado tiver menos dígitos que x , ZEROFILL
precederá zeros.
INT (5) ZEROFILL com o valor armazenado de 32 mostrará 00032
INT (5) com o valor armazenado de 32 mostrará 32
INT com o valor armazenado de 32 mostrará 32
se o valor armazenado tiver mais dígitos que x , será mostrado como está.
INT (3) ZEROFILL com o valor armazenado de 250000 mostrará 250000
INT (3) com o valor armazenado de 250000 mostrará 250000
INT com o valor armazenado de 250000 mostrará 250000
O valor real armazenado no banco de dados não é afetado, o tamanho ainda é o mesmo e qualquer cálculo se comportará normalmente.
Isso também se aplica a BIGINT, MEDIUMINT, SMALLINT e TINYINT.
ZEROFILL
.
De acordo com aqui , int(11)
serão necessários 4 bytes de espaço, que são 32 bits de espaço com 2^(31) = 2147483648
valor máximo e -2147483648
valor mínimo. Um pouco é para sinal.
Como já foi dito, os valores mínimos / máximos que a coluna pode armazenar e a quantidade de armazenamento necessária em bytes é definida apenas pelo tipo, não pelo comprimento.
Muitas dessas respostas estão dizendo que a (11)
peça afeta apenas a largura da tela, que não é exatamente verdadeira, mas principalmente.
A definição de int(2)
com nenhuma zerofill especificado irá:
100
100
quando a saída (não 0
ou 00
)A única coisa que (2)
você fará é se zerofill também for especificado :
1
será mostrado 01
.A melhor maneira de ver todas as nuances é executar:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`int1` int(10) NOT NULL,
`int2` int(3) NOT NULL,
`zf1` int(10) ZEROFILL NOT NULL,
`zf2` int(3) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mytable`
(`int1`, `int2`, `zf1`, `zf2`)
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);
select * from mytable;
que produzirá:
+----+-------+-------+------------+-------+
| id | int1 | int2 | zf1 | zf2 |
+----+-------+-------+------------+-------+
| 1 | 10000 | 10000 | 0000010000 | 10000 |
| 2 | 100 | 100 | 0000000100 | 100 |
+----+-------+-------+------------+-------+
Esta resposta foi testada no MySQL 5.7.12 para Linux e pode ou não variar para outras implementações.
Qual é o tamanho da coluna int (11) no mysql em bytes?
(11)
- este atributo do int
tipo de dados não tem nada a ver com o tamanho da coluna. É apenas a largura de exibição do tipo de dados inteiro. A partir de 11.1.4.5. Atributos de tipo numérico :
O MySQL suporta uma extensão para especificar opcionalmente a largura de exibição de tipos de dados inteiros entre parênteses, seguindo a palavra-chave base para o tipo. Por exemplo, INT (4) especifica um INT com uma largura de exibição de quatro dígitos.
Uma boa explicação para isso pode ser encontrada aqui
Para resumir: O número N em int (N) geralmente é confundido pelo tamanho máximo permitido para a coluna, como ocorre no caso de varchar (N).
Mas esse não é o caso dos tipos de dados Inteiros - o número N entre parênteses não é o tamanho máximo da coluna, mas simplesmente um parâmetro para informar ao MySQL qual largura exibir a coluna quando os dados da tabela estiverem sendo visualizados através do MySQL console (quando você estiver usando o atributo ZEROFILL).
O número entre colchetes dirá ao MySQL quantos zeros devem ser preenchidos com números inteiros recebidos. Por exemplo: Se você estiver usando ZEROFILL em uma coluna definida como INT (5) e o número 78 for inserido, o MySQL preencherá esse valor com zeros até que o número satisfaça o número entre colchetes. ou seja, 78 se tornará 00078 e 127 se tornará 00127. Para resumir: O número entre colchetes é usado para fins de exibição.
De certa forma, o número entre colchetes é meio inútil, a menos que você esteja usando o atributo ZEROFILL.
Portanto, o tamanho para o int permaneceria o mesmo, ou seja, -2147483648 a 2147483648 para assinados e 0 a 4294967295 para não assinado(~ 2,15 bilhões e 4,2 bilhões, que é uma das razões pelas quais os desenvolvedores desconhecem a história por trás do Número N entre parênteses, pois dificilmente afeta o banco de dados, a menos que contenha mais de 2 bilhões de linhas) e, em termos de bytes, seria de 4 bytes .
Para mais informações sobre tamanho / faixa de Tipos Inteiros, consulte o Manual do MySQL.
Embora seja improvável que essa resposta seja vista, acho que vale a pena fazer os seguintes esclarecimentos:
UM POUCO DE DETALHE,
a largura de exibição é, aparentemente, destinada a fornecer alguns metadados sobre quantos zeros serão exibidos em um número preenchido com zero.
Na verdade, NÃO limita o tamanho de um número retornado de uma consulta se esse número ultrapassar a largura de exibição especificada.
Para saber qual comprimento / largura é realmente permitido para um tipo de dados inteiro no MySQL, consulte a lista e o link: ( tipos: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
Dito isso, você pode esperar que a largura da exibição não afete os resultados de uma consulta padrão, a menos que as colunas sejam especificadas como colunas ZEROFILL
OU
no caso de os dados serem puxados para um aplicativo e esse aplicativo estar coletando o largura de exibição a ser usada para algum outro tipo de preenchimento.
Referência principal: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
n
letras pequenas , então ... sim, isso é besteira. Ele só faz qualquer coisa com zerofill.
No número inteiro do MySQL int(11)
, o tamanho é de 4 bytes, o que equivale a 32 bits.
O valor assinado é: - 2^(32-1) to 0 to 2^(32-1)-1
= -2147483648 to 0 to 2147483647
Os valores não assinados são: 0 to 2^32-1
= 0 to 4294967295
de acordo com este livro :
O MySQL permite especificar uma "largura" para tipos inteiros, como INT (11). Isso não faz sentido para a maioria das aplicações: não restringe a faixa legal de valores, mas simplesmente especifica o número de caracteres que as ferramentas interativas do MySQL reservam para fins de exibição. Para fins de armazenamento e computação, INT (1) é idêntico a INT (20).