Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte ao desenvolvimento de jogos


    MySQL - INT(11) vs BIGINT(11) vs TINYINT(11)

    Valentine
    Valentine
    Administrador
    Administrador


    Medalhas : MySQL - INT(11) vs BIGINT(11) vs TINYINT(11) ZgLkiRU
    Mensagens : 5345
    Créditos : 1164

    MySQL - INT(11) vs BIGINT(11) vs TINYINT(11) Empty MySQL - INT(11) vs BIGINT(11) vs TINYINT(11)

    Mensagem por Valentine Ter Fev 02, 2021 11:02 am

    Este parece ser um equívoco comum entre muitos desenvolvedores que interagem com o MySQL. A suposição é que o 11 no INT(11) determina o tamanho máximo do inteiro que a coluna pode armazenar, ou seja, que uma coluna definida como INT(11) manterá um valor inteiro de até 11 dígitos de comprimento e que uma coluna definida como INT(6) manterá um valor inteiro de até 6 dígitos de comprimento. Este equívoco existe devido a três razões:

    1. Os desenvolvedores raramente são pegos por ele. Isso ocorre porque uma coluna de número inteiro regular pode armazenar valores de número inteiro até 2.147.483.647. Isso é perto de 2,15 bilhões . Isso significa que uma chave primária inteira não "atingirá o teto" até que a tabela em questão contenha mais de 2 bilhões de linhas. Na maioria dos casos, isso nunca acontece.
    2. Tipos de dados de string, como CHAR e VARCHAR permitem que você especifique o comprimento máximo. Por exemplo: Uma coluna definida como VARCHAR(30) conterá apenas 30 caracteres ou menos. Qualquer coisa acima desse valor será truncada.
    3. Muitos desenvolvedores nunca lêem o manual.

    Então, se o 11 em INT(11) não é um determinante para o tamanho máximo da coluna, o que é? Simplificando: é o próprio tipo de dados que determina o valor máximo. Por exemplo: uma coluna TINYINT regular sempre terá um valor máximo de 127, uma coluna INT sempre terá um valor máximo de 2147483647 e uma coluna BIGINT sempre terá um valor máximo de 9223372036854775807. O número entre colchetes não afeta o tamanho do inteiro sendo armazenado. Para obter uma lista completa dos intervalos de tipos de dados inteiros, dê uma olhada no manual oficial.

    O que o número entre parênteses realmente faz?
    Para ser honesto, o número entre colchetes é inútil, a menos que você esteja usando o atributo ZEROFILL. Tudo o que ele faz é dizer ao MySQL qual largura exibir a coluna quando os dados da tabela estão sendo visualizados por meio do console do MySQL. Se você estiver usando o atributo ZEROFILL, o número entre colchetes dirá ao MySQL com quantos zeros preencher os inteiros de entrada. 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.

    Nota
    O manual oficial do MySQL também lista o número de bytes que cada tipo de dado inteiro requer. Um TINYINT ocupará 1 byte. Um SMALLINT ocupará 2 bytes. Um INT ocupará 4 bytes. Um BIGINT ocupará 8 bytes. Isso significa que você deve escolher seus tipos de dados inteiros com sabedoria. Na semana passada, mudei uma coluna de INT(1) para TINYINT(1) porque ela estava sendo usada apenas para armazenar 1s e 0s. O resultado? Um 6 MB desnecessário foi removido do tamanho total da mesa. Depois de fazer alterações semelhantes em mais algumas colunas, consegui me livrar de 25 MB de dados desnecessários. Tente manter isso em mente na próxima vez que usar um INT em vez de um TINYINT ou um BIGINT em vez de um INT.

    Tópico original:
    https://web.archive.org/web/20161222191854/http://waynewhitty.ie/blog-post.php?id=19

    Texto escrito por:
    Wayne

      Data/hora atual: Qui Nov 21, 2024 9:01 am