O @cellepo é um sql genérico, o outro é específico para o mysql (além disso, este tem muito mais visualizações). Se você quiser fazer uma caçada e me deixar fechá-los rapidamente em um voto, visite o bate-papo da SOBotics e faça um ping para mim. Mas o que deve ser fechado deve ser marcado mysqlantes da minha chegada. Thx
Drew
6
Ei pessoal. É possivelmente duplicado, mas é mais amigável para pesquisas. A maioria das pessoas pesquisa assim usando int (11). e está resolvendo as questões de outras pessoas. você pode verificar o número de visualizações em comparação com outro. e o usuário encontrará respostas mais detalhadas aqui.
Gaurav #
Respostas:
685
Um INTsempre 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)
então qual é o significado de 11 em int (11) aqui.
Gaurav
73
Na coluna INT (4), o número inteiro 1 seria exibido como 0001 SOMENTE se a coluna também fosse especificada como zerofill. Caso contrário, ele será exibido apenas como número 1, sem dígitos extras. @ Gaurav - não misture como o mysql exibe dados e como os armazena, essas são duas coisas diferentes. O que você vê não é o que realmente pode ser.
Michael JV
13
@ Michael Wow, muito interessante. Portanto, se você criar uma coluna INT (3) e armazenar um valor 5001, ele armazenará 5001, mas exibirá apenas 1. Eu não sabia disso.
precisa saber é o seguinte
16
@andrewtweber: 5001será exibido como 5001se o campo estiver definido como INT(3). Veja a resposta @priyabagus abaixo e aqui .
Go2null
10
Se você não fornecer um comprimento para campos inteiros, o MySQL definirá um valor padrão (tinyint 4, smallint 6, mediumint 9, int 11, bigint 20). Vale a pena notar que esses comprimentos padrão são suficientes para exibir qualquer número que pode ser armazenado neste campo (por exemplo: smallint max value é 2 ^ 16 = 65536, 5 dígitos) A menos que você tenha um bom motivo para fazê-lo, recomendo deixar os tamanhos padrão para evitar surpresas ruins.
Thibault Witzig
167
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 , ZEROFILLprecederá 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.
Portanto, o comprimento não faz absolutamente nada, a menos que você use o zerofill?
developerbmw
29
@developerbmw - Correto. O comprimento não faz absolutamente nada, a menos que você use ZEROFILL.
Rick James
O ZEROFILL é essencialmente o modo de compatibilidade de mainframe.
Henk Poley
114
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) = 2147483648valor máximo e -2147483648valor mínimo. Um pouco é para sinal.
Seu exemplo tem 9 noves. Você pode confirmar que seu exemplo está correto? Se sim, por que diz 10 quando existem 9 noves? É o número de dígitos mais um mais o caractere de sinal?
Homer6
5
Não, o número máximo é 4294967295 se não tiver assinado int, ou seja, 2 ^ 32. O número entre colchetes não afeta o tipo de armazenamento. Se você precisar de mais de 2 ^ 32, precisará ir para bigint.
Kieran Tully
7
Ou melhor, (2 ^ 32) -1.
Kieran Tully
2
+ Kieran está certo. O número máximo é diferente do da resposta. Veja aqui
daviewales
38
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á:
ainda aceita um valor de 100
ainda exibe um valor de 100quando a saída (não 0ou 00)
a largura de exibição será a largura do maior valor produzido na consulta de seleção.
A única coisa que (2)você fará é se zerofill também for especificado :
um valor de 1será mostrado 01.
Ao exibir valores, a coluna sempre terá uma largura do valor máximo possível que a coluna poderia levar, com 10 dígitos para um número inteiro, em vez da largura mínima necessária para exibir o maior valor que a coluna precisa mostrar nessa consulta de seleção específica , que poderia ser muito menor.
A coluna ainda pode receber e mostrar um valor que excede o comprimento, mas esses valores não serão prefixados com 0s.
A melhor maneira de ver todas as nuances é executar:
"Observe como a coluna int1 tem uma largura de exibição muito menor que o zerofill2, mesmo que o comprimento seja maior" ... Ehm, isso acontece porque o nome da coluna 'zerofill2' tem 9 caracteres e vs 'int1' sendo 4.
neokio
2
... sim, o comprimento claramente não tem efeito, mesmo na largura da tela quando o zerofill não está ativado. Caso contrário, int1 seria muito mais amplo, com uma largura de 10 caracteres.
Programster
2
Uma boa explicação com um exemplo sólido. Resposta muito melhor do que a aceita. Obrigado @Programster.
Corin
Nit menor: Como neokio aponta, não é possível observar nesta consulta as conseqüências exatas de "int (3)" com preenchimento zero. Reduza o nome da coluna para "zf2", para tornar o comportamento mais claro. Especificamente, seja verdadeiro ou falso [na versão de banco de dados especificada] que "(com zerofill) Ao exibir valores, a coluna sempre terá uma largura do valor máximo possível que a coluna poderia levar, com 10 dígitos para um número inteiro"
ToolmakerSteve
1
Para esclarecer o comentário de neokio e meu pequeno comentário secundário: A frase "Observe como a coluna int1 tem uma largura de exibição muito menor que zerofill2, mesmo que o comprimento seja maior". deve ser removido da resposta. Isso é uma consequência do número de caracteres na palavra do cabeçalho "zerofill2" - não tem nada a ver com o teste das larguras de exibição. Melhor atribuir um nome mais curto a essa coluna, por exemplo, "zf2". Então teríamos uma tabela em que "int1, int2 e zf2 são todos exatamente da mesma largura, embora int2 e zf2 especifiquem uma largura pequena (3)".
Página
32
Qual é o tamanho da coluna int (11) no mysql em bytes?
(11)- este atributo do inttipo 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.
@ OldGeezer - concordo, "número de linhas" é irrelevante para a maioria das colunas. Somente relevante para a coluna de chave primária (ID) de incremento automático.
ToolmakerSteve
10
Embora seja improvável que essa resposta seja vista, acho que vale a pena fazer os seguintes esclarecimentos:
o (n) por trás de um tipo de dados inteiro no MySQL está especificando a largura de exibição
a largura da tela NÃO limita o comprimento do número retornado de uma consulta
a largura de exibição limita o número de zeros preenchidos para uma coluna preenchida com zero, para que o número total corresponda à largura de exibição (desde que o número real não exceda a largura de exibição, nesse caso, o número é mostrado como está)
a largura da tela também é uma ferramenta útil para os desenvolvedores saberem a que comprimento o valor deve ser aumentado
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.
Obrigado por fornecer a resposta adequada. Eu estava tentando a partir da linha de comando do MySQL, e não conseguia cortar nenhum dígito com nletras pequenas , então ... sim, isso é besteira. Ele só faz qualquer coisa com zerofill.
MPEN
@mpen feliz por poder ajudar, isso estava relacionado a algo que eu estava tentando e achei que poderia colocar mais detalhes aqui que podem ser úteis para outra pessoa.
26616 MER
9
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
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).
mysql
antes da minha chegada. ThxRespostas:
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 armazenadoint(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)
fonte
5001
será exibido como5001
se o campo estiver definido comoINT(3)
. Veja a resposta @priyabagus abaixo e aqui .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 em
INT(x)
se o valor armazenado tiver menos dígitos que x ,
ZEROFILL
precederá zeros.se o valor armazenado tiver mais dígitos que x , será mostrado como está.
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.
fonte
ZEROFILL
.De acordo com aqui ,
int(11)
serão necessários 4 bytes de espaço, que são 32 bits de espaço com2^(31) = 2147483648
valor máximo e-2147483648
valor mínimo. Um pouco é para sinal.fonte
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ão0
ou00
)A única coisa que
(2)
você fará é se zerofill também for especificado :1
será mostrado01
.A melhor maneira de ver todas as nuances é executar:
que produzirá:
Esta resposta foi testada no MySQL 5.7.12 para Linux e pode ou não variar para outras implementações.
fonte
(11)
- este atributo doint
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 :fonte
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.
fonte
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
fonte
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
fonte
de acordo com este livro :
fonte
Acho valor máximo de int (11) é 4294967295
fonte
4294967295 é a resposta, porque int (11) mostra o máximo de 11 dígitos IMO
fonte