varchar (max) 8000 열 이해 및 8000 자 이상을 저장할 수있는 이유


13

에서 마이크로 소프트 문서, +

n은 문자열 길이를 정의하며 1에서 8,000 사이의 값일 수 있습니다. max는 최대 저장소 크기가 2 ^ 31-1 바이트 (2GB)임을 나타냅니다. 스토리지 크기는 입력 된 데이터의 실제 길이 + 2 바이트입니다.

이것을 이해하도록 도와주세요.

varchar의 최대 문자는 ~ 인 것 같습니다 8000. 이는 2GB데이터 가치 보다 적습니다 .

varchar(max)특정 테이블 의이 열에 len(mycolumn)> 100 000 인 레코드가있는 것을 알 수 있습니다. 따라서 열 보다 많은 8000문자를 사용할 수 있다는 것을 알고 있습니다 varchar(max).

질문 1 :8000 캐릭터는 어떻게 작동 하며 어디에서 알아야합니까?

질문 2 :이 열에 대한 .net 데이터 리더 쿼리는 항상 100 000 + 문자로 전체 결과를 반환합니까?


참고 varchar(max)한 번 불렀다 text과 다른 데이터 유형으로 처리 하였다.
Mr Lister

이거 읽어봐 ? 그것의 관련 8K 페이지 크기에. 단일 페이지에 맞지 않기에 너무 큰 값 (제한은 실제로 8000보다 약간 큼)은 LOB_DATA 페이지 (큰 개체)에 저장됩니다.
Justin

답변:


30

왜 당신이 이것을 오해하는지 알 수 있습니다-조금 까다 롭습니다. 이것들은 모두 유효합니다 :

  • VARCHAR (1)-하나의 문자열
  • VARCHAR (4000)-4,000 자
  • VARCHAR (8000)-8,000 자-이 필드 정의에 숫자를 사용하는 경우 사용할 수있는 가장 큰 NUMBER이지만 다음을보십시오.
  • VARCHAR (MAX)-최대 2GB를 보유합니다.

예, VARCHAR (MAX) 필드에서 데이터를 가져 오려고하고 누군가 2GB를 저장 한 경우에는 연결이 끊어집니다.


3
and somebody stored 2GB in there, buckle up.-몇 개의 blob 파일이 있습니다
Ruslan

7

질문 1 : 8000 명의 캐릭터는 어떻게 작동하며 어디에서 알아야합니까?

n을 8000으로 설정하면 8000자가 재생됩니다. char, nchar, nvarchar 및 varchar 에 대한 Precision, Scale 및 Length (Transact-SQL) 참조를 알고 있어야합니다 . 반대로 n을 max (따옴표 없음)로 설정하면 SQL Server에서 인용 부호에 언급 된대로 최대 바이트 수를 저장하고 반환합니다.

질문 2 :이 열에 대한 .net 데이터 리더 쿼리는 항상 100 000 + 문자로 전체 결과를 반환합니까?

이것은 .Net (SQL Server 아님) 질문이지만 .Net 데이터 리더는 바이트 스트림을 가져옵니다. 바이트는 문자가 아니며 SQL Server는 문자가 아닌 바이트를 반환합니다. n이 8000으로 설정되고 데이터 유형이 nvarchar 인 경우 SQL Server는 최대 8000 바이트를 반환하며 .Net 데이터 리더는 4000 개의 유니 코드 문자로 해석 할 수 있습니다. n이 8000으로 설정되고 데이터 유형이 varchar 인 경우 SQL Server는 최대 8000 바이트를 반환하며 .Net 데이터 리더는 최대 8000 ANSI 문자로 해석 할 수 있습니다. n이 max로 설정되고 데이터 유형이 nvarchar 인 경우 SQL Server는 최대 2 ^ 31-1 바이트를 반환하며, .Net 데이터 리더는 최대 (2 ^ 31-1) / 2 자로 해석 될 수 있습니다. n이 max로 설정되고 데이터 유형이 varchar 인 경우 SQL Server는 최대 2 ^ 31-1 바이트를 반환하며 .Net 데이터 리더는 최대 2 ^ 31-1 ANSI 문자로 해석 할 수 있습니다.

더 많은 "문자"(더 정확하게 : 바이트)를 저장할 수 있기 때문에 char 또는 varchar (nchar 또는 nvarchar 대신)를 사용하도록 선택하면 많은 유니 코드 문자에 동등한 ANSI 문자가 없으므로 (따라서 전 세계 사용자는 앱에서 현지화 된 / 네이티브 문자를 볼 수 없습니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.