Esta era uma dúvida que eu tinha sempre que necessitava de criar as minhas tabelas.
Fica aqui uma pequena explicação do unsigned e signed:
Unsigned é uma atribuição para campos inteiros de tabelas de MySQL. Um colega, iniciante nesta área me perguntou, ao ver um diagrama de classes que eu havia lhe passado, sobre o porque de utilizar em todos os meus indexes essa atribuição, perguntei então se ele sabia o que significava e o mesmo não soube me responder. minha primeira explicação foi a mais simples possível: Campos que utilizam essa atribuição não podem ser negativos, mas aquilo ficou me cutucando a mente e fui fazer uma busca por maiores detalhes. Me deparei com uma informção muito legal sobre o Range de números suportados no Mysql:
A maior diferença entre um campo marcado como unsigned é que esse tipo de campo não pode ser negativo, então se você está criando um index é bom utilizá-lo sempre como unsigned, mas existe um outro benefício, um “range” maior de números positivos para se trabalhar
Tinyint:
signed range é de -128 até 127.
unsigned range - 0 até 255
Mediumint:
signed range é de -8388608 até 8388607
unsigned range é de 0 até 16777215
Bigint:
signed range é de -9223372036854775808 até 9223372036854775807
unsigned range é de 0 até 18446744073709551615
Fonte: lemos.biz