Essa largura de exibição de "recurso" adicional é bastante confusa, porque em outros tipos de coluna como
CHAR
é especifica o comprimento. Aqui está um pequeno detalhamento:
- Mais importante:não especificando o "espaço de armazenamento" ou "número de dígitos". Está apenas dizendo como os dados nesta coluna são formatados antes de ser devolvido. INT(5) pode armazenar o mesmo valores como INT(16) ou INT(255) - todos os três podem armazenar todos (e somente) valores válidos para INT. INT(255) não pode armazenar um número com 255 dígitos. O espaço de armazenamento para todos eles é o espaço que um INT ocupa.
- Se você usar
ZEROFILL
em uma coluna com largura de exibição e a representação de string do número armazenado for menor que a largura de exibição, ela será preenchida com zeros à esquerda. Se for mais longo, nada acontece. Se você escolher INT(5) e o valor for 13, ele será retornado como 00013. Se o valor for 123456, ele será retornado como 123456. - Se você não usar
ZEROFILL
, não haverá preenchimento (sem espaços e tal) - Se você usar
ZEROFILL
, você deve estar ciente de que a coluna também seráUNSIGNED
- Em qualquer caso, a largura de exibição é retornada quando os metadados da tabela são consultados. Assim, um aplicativo pode saber como os dados devem ser formatados.
Eu não gosto da largura de exibição, porque a camada de armazenamento está "sabendo" sobre a apresentação visual dos dados armazenados. Além disso, não há nenhum uso que eu saiba.