2013-08-26 5 views
0

저는 항상 SQL 문자열 열의 최대 길이에 대한 필요성에 시달렸습니다. 실제 최대 길이가없는 데이터가 있습니다. 예를 들어 누군가의 이름을 저장하는 입력란이 있고이를 NVARCHAR(50)으로 설정했다고 가정 해 보겠습니다. 누군가가 50 자보다 긴 이름을 가질 수는 있지만 (가능성은 낮지 만) 항상 가능합니다.nvarchar는 최대 크기로 즉시 변경합니다.

비행 중에 필드의 최대 길이를 변경하는 것이 가능합니까? 내가 의미하는 바는 INSERT/UPDATE을 할 때 그 사람의 이름이 50 자보다 긴지 확인하고 ALTER 테이블을 확인한 후에 INSERT/UPDATE을 수행해야합니다. (또는 예외를 catch하고 필요하면 ALTER을 수행하십시오.)

테이블에 많은 양의 데이터가있는 경우 ALTER이 느린 작업을 수행합니까?

열을 NVARCHAR(100)으로 변경한다고 가정 해 보겠습니다. 이 테이블의 SELECT은 처음부터 NVARCHAR(100)으로 만들었을 때보 다 느려 집니까?

+3

데이터베이스 스키마를 즉시 변경하는 것은 끔찍한 생각입니다. 합리적으로 필드를 크게 만들고 입력의 유효성을 검사하는 코드를 가져야합니다. –

+0

좋은 기본값을 선택하십시오. 이 스레드 질문에는 몇 가지 사려 깊은 답변이 있습니다. http://stackoverflow.com/questions/919871/how-big-do-you-make-your-nvarchar – dcaswell

+0

어떤 DBMS를 사용하고 있습니까? 신탁? 포스트그레스? 또 다른 옵션은 열을 가능한 한 길게 정의한 다음 점검 규칙을 사용하여 비즈니스 규칙이 유지되도록하는 것입니다. 검사 제약 조건을 변경해도 데이터에 물리적 인 변경은 적용되지 않습니다. –

답변

2

nvarchar()을 사용하면 SQL Server를 사용하고있는 것으로 추측됩니다.

SQL Server에서 나는 보통 이러한 이름을 varchar(255) (또는 nvarchar(255))으로 지정합니다. 이것은 실제로 2의 제곱 (255 = 가장 큰 8 비트 부호없는 값)에 대한 친밀 성의 이상한 시대 착오적 현상입니다. 그러나 그것은 실제로 잘 작동합니다.

SQL Server에는 적어도 두 가지 고려 사항이 있습니다. 첫째, 문자열의 최대 "최대가 아닌"길이는 8000 데이터 바이트이며 varchar(8000) 또는 nvarchar(4000)입니다. 합리적인 최대 길이입니다.

두 번째 고려 사항은 색인의 키 길이입니다. 최대 길이는 900 바이트입니다. 필드에 색인이 있으면이 필드보다 긴 필드를 원하지 않습니다. 복합 인덱스가있는 경우 255는 적당한 길이처럼 보입니다.

그러나 중요한 점은 필드의 길이를 변경하면 인덱스와 같이 생각할 수없는 효과가 발생할 수 있다는 것입니다. 가볍게 테이블의 구조를 변경하고 싶지는 않습니다. 대신, 필드를 너무 크게 만들어서 문제를 완전히 잊어 버리십시오.

+0

해싱 및 정렬과 같은 일부 작업의 경우 SQL Server에서 평균을 계산합니다. 데이터 길이는 columnlength/2 ...로 끔찍합니다. nvarchar (4000)가 잘못되었습니다. – usr

관련 문제