2009-05-28 5 views
3

데이터베이스를 디자인 할 때 nvarchar의 크기를 결정할 때 어떤 결정을 고려해야합니까?BIG 어떻게하면 Nvarchar를 만들 수 있습니까?

내가 주소 테이블을 만들려고한다면 내 직감은 주소 링크 1이 이전 액세스 데이터베이스와 마찬가지로 nvarchar (255)가 될 것입니다.

나는 이것을 사용하여 오래된 'The string is truncated'으로 귀찮게했습니다. 나는 이것이 입력 상자를 제한함으로써 방지 될 수 있지만 사용자가 정말로 255 이상의 주소 라인을 가지면 이것이 허용되어야한다는 것을 안다.

이 얼마나 큰 내 NVARCHAR (????) 내가 항상 VARCHAR를 사용 개인적으로 :-) NVARCHAR를 사용하지 않는

+0

요구 사항 사양에 있어야합니까? ;-) –

+1

나는 추측한다. 그러나 당신이 스펙을 만드는 사람이라면 그것은 당신에게 주어진다. – Paul

답변

3

내 권장 사항 : 정말로 필요한만큼 큰 용지를 사용하십시오.

예. 우편 번호 열의 경우 10-20 개의 문자로 충분합니다. 전화 번호는 물론입니다. 전자 메일은 50-100 자 이상일 수 있습니다. 이름 - 글쎄, 나는 일반적으로 50 자, 첫 번째 이름에는 맞지 않는다. 정말로 필요한 경우 항상 쉽고 쉽게 필드를 확장 할 수 있습니다. 이것은 전혀 큰 일이 아닙니다.

모든 varchar/nvarchar 필드를 가능한 크게 만들 수는 없습니다. 결국 SQL Server 페이지는 고정되어 행당 8060 바이트로 제한됩니다. NVARCHAR (4000)의 10 개 필드가 문제가되는 것입니다. (실제로 너무 많은 데이터를 채우려는 경우 SQL Server가 바보가됩니다).

정말 큰 필드가 필요한 경우 NVARCHAR/VARCHAR (MAX)를 사용하십시오. 페이지가 저장되어있는 한 페이지에 저장되며, 너무 커지면 "오버플로"저장소로 전송됩니다.

NVARCHAR과 VARCHAR : 일본어, 중국어 또는 기타 ASCII 스타일이 아닌 "이국적인"문자가 실제로 필요합니까? 유럽에서는 동유럽 문자 중 일부조차도 VARCHAR 필드로 더 이상 표현할 수 없습니다 (그들은 철자가 분리됩니까?) 서유럽 언어 (영어, 독일어, 프랑스어 등)는 모두 VARCHAR

하지만 : NVARCHAR 두 배 많은 공간을 사용하지 않습니다 - 디스크와 SQL Server 메모리에 - 그건 :-)하지만 당신에게 정말을 - 항상 당신이 정말로 그것을 필요하면, 당신은 그것을 필요합니다..? 너까지.

마크 당신의 특정 제약 조건이 필요합니다 컬럼에 대한

+1

그리고 내 앱이 러시아인에 의해 사용 되었다면 나는 그것을 필요로 할 것입니다. 감사합니다. – Paul

3

을해야한다.

그러나 이름에 100을 사용하고 댓글에 1000을 사용하는 경향이 있습니다. 더 긴 문자열을 트래핑하고 다루는 것은 클라이언트가 할 수있는 일이며, regex를 통해 말하면 SQL은 예상 한 데이터 만 가져옵니다.

예를 들어 저장된 procs를 통해 호출을 매개 변수화하는 것을 피할 수 있습니다. 매개 변수가 varchar (200)로 정의 된 경우 say> 200을 보내면 자르기가 자동으로 발생합니다. 잘라 내기 오류는 INSERT 또는 UPDATE 문에만 발생합니다. 매개 변수를 사용하면 잘리지 않습니다.

vachar가 8000으로 변경 255 SQL 서버 7.0 +로 제한하고 유니 코드에 대한 지원이 추가 되었기 때문에 SQL Server의 255 "제한"6.5로 돌아갑니다

편집 :

나는하지 않는 이유 nvarchar를 사용하십시오 : 두 배의 메모리 공간, 두 배 색인 크기, 두 배 디스크 크기, 간단하게 필요하지 않습니다. 저는 전 세계에 지사를두고있는 스위스의 큰 회사에서 일하고 있습니다. 그래서 나는 편협하지 않습니다.

또한 여기에 설명 : varchar vs nvarchar performance 더 반사에

, 나는 그것은 어떤 분야에 따라

+0

왜 코멘트를 100으로 제한 하겠는가? 스택 오버플로는 600을 허용합니다. 어떤 데이터 유형을 사용합니까? – Paul

+0

nvarchar를 사용하지 않는 이유는 무엇입니까? 대신 무엇을 사용합니까? –

+0

@Paul : 1000! aarrghghhh ... – gbn

0

... 클라이언트 개발자하지만 성능과 효율성에 초점 개발자 DBA와 같은 유니 코드 항소를 건의 할 것 를 나타냅니다. 빠른 프로토 타입을 수행하는 경우 기본값 255를 남겨 둡니다. 주석 등이 있으면 1000으로 설정합니다.

작게 만들 수있는 유일한 방법은 실제로 필자가 알고있는 것들입니다. siez, 우편 번호 또는 NI 번호 등이 포함됩니다.

0

- 등 이름, 이메일, 주소, 같은 - 당신은 상당히 높은 최대 길이를 넣어해야합니다. 예를 들어 50 자 이상인 이름은 약간 의심스러워 보입니다. 그 크기보다 큰 입력은 아마도 그 이름을 더 많이 포함하게됩니다. 그러나 데이터베이스의 초기 디자인을 위해서는 을 적당한 크기로 두 번으로 두십시오. 그래서 첫 번째 이름은 100으로 설정하십시오 (100이 적당한 크기라면 200으로 설정하십시오). 그런 다음 앱을 프로덕션에 배치하고 사용자가 충분히 오래 데이터를 수집 한 다음 실제 max(len(FirstName))을 확인하도록합니다. 의심스러운 가치가 있습니까? 50자를 초과하는 항목이 있습니까? 거기에있는 것을 찾아 실제로 이름인지 아닌지 확인하십시오. 그렇지 않은 경우 입력 양식에 더 나은 설명/유효성 검사가 필요할 수 있습니다.

의견도 같습니다. 처음에는 nvharchar(max)으로 설정하십시오. 그런 다음 성능 최적화를 시작할 수있을 정도로 데이터베이스가 커지면 으로 다시 돌아옵니다. 댓글의 최대 길이를 두 배로 늘리면 칼럼의 최대 길이가 길어집니다.

관련 문제