Pergunta

Eu vejo VARCHAR (255) que está sendo usado o tempo todo em vez de VARCHAR (256), mas também vejo VARCHAR (16) que está sendo usado em vez de VARCHAR (15). Isso parece inconsistente para mim. Se um byte extra está sendo usado para armazenar o comprimento do VARCHAR, não deve esta regra também se aplicam aos comprimentos menores, como 2, 4, 8 para ser 1, 3, 7, em vez disso?

Ou estou faltando totalmente alguma coisa?

Em outras palavras, se eu tiver um número que eu sei que nunca será acima de 12, eu deveria apenas ir em frente e utilizar um VARCHAR (15) ou VARCHAR (16) em vez disso? Porque ele usa a mesma quantidade de espaço como um VARCHAR (12)? Se assim for, qual deles devo usar? 15 ou 16? Será que esta mudança de regra em tudo quando eu chegar mais perto de 256?

Eu uso ambos MySQL e SQL, dependendo do projeto.

Foi útil?

Solução

Em outras palavras, se eu tiver um número que eu sei que nunca será acima de 12, eu deveria apenas ir em frente e utilizar um VARCHAR (15) ou VARCHAR (16) em vez?

Não! Use varchar (12) (ou talvez mesmo char (12) se o comprimento é bastante constante).

Era uma vez o tipo varchar foi limitado a 255 caracteres em alguns sistemas ( incluindo MySQL antes 5.0.3 ) porque o primeiro byte armazenado indicado o comprimento do campo. Dada esta restrição, devs que querem permitir que uma quantidade razoável de texto iria escolher 255 ao invés de ir a um tipo de dados diferente.

Mas se você sabe o tamanho de seus dados, definitivamente usar exatamente que o tamanho do banco de dados.

Outras dicas

Não tem nada a ver com números pares ou ímpares.

Historicamente, 255 caracteres tem sido muitas vezes o comprimento máximo de um VARCHAR em vários DBMSes. O limite do comprimento de um campo que não foi um LOB (Large Object) para trás, em seguida, foi de 255 bytes (um byte int). Assim, o primeiro byte foi usada para armazenar o comprimento do campo (0-255), e o restante n bytes para os caracteres. É por isso que muitas vezes você vê VARCHAR(255).

Se o campo nunca será maior do que 12, uso VARCHAR(12).

Eu acho que o problema original é que, para alguns sistemas VARCHAR (...) foi limitado a 255, porque quando você usa um byte para codificar o comprimento real, você só pode expressar comprimentos até 255.

VARCHAR (16) / VARCHAR (15) é mais provável que lembra dessas origens, mas não há nada de especial em dois valores.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top