Um post bem rápido sobre os tipos de dados para texto que temos no SQL Server.

Temos duas variações com 'n' e sem o 'n'. O 'n' explicita que os caracteres são armazenados em unicode, o que corresponde a 2 bytes ou 16 bits, enquanto que os sem 'n' são armazenados em ASCII 1 byte ou 8bits.

Basicamente, se você criar uma coluna do tipo char ou varchar de tamanho 50, teremos alocado 50 bytes para tais colunas. Entretanto no caso de nvarchar(50) ou nchar(50) teremos alocado 100 como tamanho máximo, uma vez que os tamanhos são definidos em bytes e não em tamanhos absolutos.

No SQL Server 2005, o tamanho máximo para estes campos são de 8000 bytes. Portanto para char e varchar o máximo é 8000, enquanto que para nchar e nvarchar o máximo é 4000 por causa do tipo de codificação usado.

Outro ponto é o uso de MAX para varchar e nvarchar. Poderíamos usar varchar(max) e nvarchar(max), permitindo a eles um valor superior a 8000 bytes, ou 8000 e 4000 caracteres, respectivamente.

As colunas com o parâmetro MAX aceitam até 2^31 bytes, ou 2 Gbytes.

Podemos observar a system view sys.columns e pegar a coluna max_length. Note que para colunas com o atributo MAX o valor é -1, justamente pelo fato de o valor exceder o limite.

Este post foi um pouco diferente do que costumo escrever, é por que nos últimos meses mexi muito com banco de dados. Vou ver se consigo escrever posts menores, com maior regularidade. Até o próximo post.