2012-07-03 6 views
0

나는 유형데이터베이스에 제출하기 전에 NVARCHAR (MAX) 자르기 - 길이는?

summary NVARCHAR(4000) NULL 

나는 테이블에 데이터를 추가하기 전에 내가 코드를 확인하고 사용자가이 코드를 사용하여 데이터베이스에 대한 너무 긴 문자열을 입력 한 경우 문제를 해결할와 SQL 행을

if (instanceToCrop.Description != null && instanceToCrop.Description.Length > 4000) instanceToCrop.Description = instanceToCrop.Description.Substring(0, 4000); 

내 테이블을 변경하는 경우, 따라서

ALTER TABLE Timeline 
ALTER COLUMN summary NVARCHAR(MAX) 
나는 길이 아래에 제출 된 문자열을 유지하기 위해 4000 대신에 무엇을 사용해야 일정

그 SQL 서버가 거부합니까?

+0

사용자가 데이터베이스 측에서 확인하는 대신 UI 측에서 많은 문자를 입력하도록 허용하면 안됩니다. .net을 사용하는 경우 텍스트 상자에 대해 maxlength 속성이 있습니다. – JonH

+3

Integer.MaxValue –

+0

JonH, 동의 함. UI 검사는 이것보다 적지 만 신중을 기하고 데이터베이스를 둘러싼 코드를 검사하는 것을 포함합니다. Joel - 흥미 롭습니다. 그 덕분에 – dumbledad

답변

1

NVARCHAR (MAX)에 저장할 수있는 최대 문자 수는 1,073,741,823이거나 그와 매우 비슷합니다. 사용자가 텍스트 상자에 텍스트의 양을 입력 할 수 있다면, 최적의 상황이 아닌 것 같습니다. 성경 또는 장미의 제왕 영화의 모든 사본을 붙여 놓았습니까?

나는 당신이 훨씬 더 실용적인 제한을 설정할 수 있다고 생각하지만, 우리는 그게 ... 50,000 자들이되어야한다고 말할 수는 없다. 100,000 자? 네트워크/패킷 이유로 64KB 미만입니까? 몰라요, 그건 기술적 결정이 아니라 사업 결정 인 것 같습니다.

+0

재미있게 말해야합니다 - 킹 제임스 버전은 내가 전형적으로 긴 텍스트로 사용해온 텍스트 중 하나입니다! – dumbledad

+0

나를 혼란스럽게하는 한 가지는 NVARCHAR에 대해 문서화 된 4000 max입니다. [http://msdn.microsoft.com/en-us/library/ms186939.aspx](http://msdn.microsoft.com/en-us/) 라이브러리/ms186939.aspx) : "n은 문자열 길이를 정의하며 1에서 4,000 사이의 값이 될 수 있습니다". 비즈니스상의 이유로 최대 길이가 16,000 자로 제한된다면 어쨌든 데이터베이스에서 NVARCHAR (MAX)를 사용해야한다는 의미입니까? – dumbledad

+1

@dumbledad 구문 다이어그램에 'n | max' -'|'='or'. 숫자 값 ('n')을 사용할 때는 1과 4000 사이 여야합니다. 4000자를 넘으면 숫자 값 대신에'max'를 사용합니다. 2GB의 데이터를 허용합니다 (10 억 문자). 개인적으로 필자는 non-max와 max 사이의 컷오프는 인덱스 키의 일부로 열을 사용하는 한계이기 때문에 900 바이트 (nvarchar의 경우 450 자) 여야한다고 생각합니다. 그러나 나는 페이지의 이유이기도하다는 것을 알고 있습니다. –

관련 문제