A partir deste documento da Microsoft,+
n define o comprimento da string e pode ser um valor de 1 a 8.000. max indica que o tamanho máximo de armazenamento é 2^31-1 bytes (2 GB). O tamanho do armazenamento é o comprimento real dos dados inseridos + 2 bytes.
Por favor me ajude a entender isso.
Os caracteres máximos para varchar parecem ser 8000
, o que vale muito menos do que 2GB
os dados.
Vejo que há registros nesta varchar(max)
coluna de uma tabela específica que possuem len(mycolumn)
> 100.000. Assim, sei que posso obter muito mais do que 8000
caracteres em uma varchar(max)
coluna.
Pergunta 1: Como os 8000
personagens entram em jogo e onde devo estar ciente disso?
Pergunta 2 : uma consulta de leitor de dados .net a esta coluna sempre retornará o resultado completo com mais de 100.000 caracteres?
Eu posso ver por que você está entendendo isso mal - é um pouco complicado. Todos são válidos:
E sim, se você tentar obter dados de um campo VARCHAR(MAX) e alguém armazenou 2 GB lá, aperte o cinto.
Definir n para 8000 faz com que 8000 caracteres entrem em jogo. Você precisa estar ciente das referências de precisão, escala e comprimento (Transact-SQL) sobre char, nchar, nvarchar e varchar. Por outro lado, definir n como max (sem aspas) faz com que o SQL Server armazene (e retorne) o número máximo de bytes (conforme mencionado em sua cotação).
Esta é uma pergunta .Net (não um SQL Server), mas o leitor de dados .Net busca um fluxo de bytes. Um byte não é um caractere e o SQL Server retorna bytes (não caracteres). Se n for definido como 8000 e o tipo de dados for nvarchar, o SQL Server retornará até 8.000 bytes, que o leitor de dados .Net pode interpretar como 4.000 caracteres Unicode. Se n for definido como 8000 e o tipo de dados for varchar, o SQL Server retornará até 8.000 bytes, que o leitor de dados .Net pode interpretar como até 8.000 caracteres ANSI. Se n for definido como max e o tipo de dados for nvarchar, o SQL Server retornará até 2^31-1 bytes, que o leitor de dados .Net pode interpretar como até (2^31-1)/2 caracteres. Se n for definido como max e o tipo de dados for varchar, o SQL Server retornará até 2^31-1 bytes, que o leitor de dados .Net pode interpretar como até 2^31-1 caracteres ANSI.
Se você optar por usar char ou varchar (em vez de nchar ou nvarchar) porque eles podem armazenar mais "caracteres" (mais precisamente: bytes), você precisa estar ciente de que muitos caracteres Unicode não possuem caracteres ANSI equivalentes (portanto, uma grande parte do nosso os usuários do mundo não poderão ver seus caracteres localizados/nativos em seu aplicativo).