가변 길이 문자 데이터가 있고 SQL Server (2005) 데이터베이스에 저장하려고합니다. TEXT SQL 유형을 선택하거나 VARCHAR SQL 유형, 성능 / 발자국 / 기능의 장단점을 선택하는 방법에 대한 모범 사례를 배우고 싶습니다.
답변
SQL Server 2005 이상을 사용하는 경우을 사용하십시오 varchar(MAX)
. text
데이터 형식은 더 이상 사용되지 않으며 새 개발 작업에 사용되어서는 안된다. 에서 워드 프로세서 :
중대한
ntext
,text
및image
데이터 형식은 이후 버전의 Microsoft SQL Server에서 제거됩니다. 새로운 개발 작업에서 이러한 데이터 유형을 사용하지 말고 현재 데이터 유형을 사용하는 응용 프로그램을 수정하십시오. 대신 nvarchar (max) , varchar (max) 및 varbinary (max)를 사용하십시오.
답변
TEXT
큰 문자열 데이터 조각에 사용됩니다. 필드 길이가 특정 임계 값을 초과하면 텍스트가 행 외부에 저장됩니다.
VARCHAR
항상 행에 저장되며 8000 자로 제한 됩니다. 당신이를 만들려고하면 VARCHAR(x)
, 여기서 X> 8000 , 오류를 얻을 :
서버 : 메시지 131, 수준 15, 상태 3, 줄 1
‘varchar’유형에 지정된 크기 ()가 모든 데이터 유형 (8000)에 허용 된 최대 값을 초과합니다.
이러한 길이 제한은 SQL Server 2005VARCHAR(MAX)
에서 중요하지 않습니다 . SQL Server 2005 는 TEXT
.
참고 MAX
여기에 일정의 일종없는, VARCHAR
그리고 VARCHAR(MAX)
, 후자의 존재 매우 가까운 매우 다른 종류가 있습니다 TEXT
.
이전 버전에서는 SQL 서버 사용자가 액세스 할 수 없습니다 TEXT
직접, 당신은 단지를 얻을 수 TEXTPTR
및 그것을 사용 READTEXT
하고 WRITETEXT
기능을합니다.
SQL Server 2005 에서는 TEXT
열에 직접 액세스 할 수 있습니다 ( VARCHAR
값을 할당하려면 명시 적 캐스트가 필요하지만 ).
TEXT
좋다 :
- 데이터베이스에 큰 텍스트를 저장해야하는 경우
- 열 값을 검색하지 않으면
- 이 열을 거의 선택하지 않고 조인하지 않으면
VARCHAR
좋다 :
- 작은 줄을 저장하면
- 문자열 값을 검색하면
- 항상 선택하거나 조인에 사용하는 경우.
여기 를 선택 하면 열의 값을 반환하는 모든 쿼리를 발행하는 것을 의미합니다.
함으로써 검색 여기서 I는 그 결과의 값에 따라 임의의 질의 실행 의미 TEXT
또는 VARCHAR
열. 이것은 어떤에서 사용 포함 JOIN
또는 WHERE
조건.
(가)로 TEXT
행 아웃 저장되고 관련되지 않은 쿼리 TEXT
열은 일반적으로 빠릅니다.
무엇이 TEXT
좋은지에 대한 몇 가지 예 :
- 블로그 댓글
- 위키 페이지
- 코드 소스
무엇이 VARCHAR
좋은지에 대한 몇 가지 예 :
- 아이디
- 페이지 제목
- 파일명
엄지 손가락의 규칙으로, 당신이 이제까지 당신에게 텍스트 값을 필요로하는 경우 초과 200 개 문자를 AND ,이 열을 사용하는 조인을 사용하지 않습니다 TEXT
.
그렇지 않으면를 사용하십시오 VARCHAR
.
PS 동일하게 적용 UNICODE
가능 NTEXT
하고 NVARCHAR
위의 예제를 사용해야 할뿐만 아니라.
PPS 동일하게 적용 VARCHAR(MAX)
하고 NVARCHAR(MAX)
있음을 SQL 서버 2005 + 사용하는 대신에 TEXT
하고 NTEXT
. 당신은 사용하도록 설정해야합니다 large value types out of row
함께 그들을 위해 sp_tableoption
당신이 그 (것)들을 항상 행 아웃을 저장할 경우.
위 언급 한 바와 같이 현재 , TEXT
미래의 릴리스에서 더 이상 사용되지 할 것입니다 :
이
text in row
옵션은 이후 버전의 SQL Server 에서 제거됩니다 . 새로운 개발 작업에서는이 옵션을 사용하지 말고 현재 사용중인 응용 프로그램을 수정하십시오text in row
. 우리는 당신이 사용하여 대량의 데이터를 저장하는 것이 좋습니다varchar(max)
,nvarchar(max)
또는varbinary(max)
데이터 유형. 이러한 데이터 유형의 행 내 및 행 외부 동작을 제어하려면large value types out of row
옵션을 사용하십시오 .
답변
SQL 서버 2005 새로운 데이터 유형은 소개했다 : varchar(max)
그리고 nvarchar(max)
그들은 기존의 텍스트 형식의 장점을 가지고 : 그들은 데이터 2GB의 영업 이익을 포함 할 수 있지만 그들은 또한의 장점을 대부분 가지고 varchar
와 nvarchar
. 이러한 장점 중에는 substring ()과 같은 문자열 조작 함수를 사용할 수있는 기능이 있습니다.
또한 varchar (max)는 테이블의 디스크 / 메모리 공간에 저장되며 크기는 8Kb 미만입니다. 필드에 더 많은 데이터를 배치 할 때만 데이터가 테이블 공간에 저장됩니다. 테이블 공간에 저장된 데이터는 (보통) 더 빨리 검색됩니다.
간단히 말해서 (n) varchar (max)와 같은 더 나은 대안이 있으므로 Text를 사용하지 마십시오. 그리고 일반적인 varchar가 충분히 크지 않을 때, 즉 저장할 문자열이 8000자를 초과 할 것으로 예상되는 경우에만 varchar (max)를 사용하십시오.
언급했듯이 TEXT 데이터 유형에 SUBSTRING을 사용할 수 있지만 TEXT 필드에 8000 자 미만인 경우에만 가능합니다.
답변
ms 2008에서 몇 가지 중요한 변경 사항이 있습니다.-> 사용할 데이터 형식을 결정할 때 다음 기사를 고려해 볼 가치가 있습니다.
http://msdn.microsoft.com/en-us/library/ms143432.aspx
당 바이트
- varchar (max), varbinary (max), xml, text 또는 image 열 2 ^ 31-1 2 ^ 31-1
- nvarchar (최대) 열 2 ^ 30-1 2 ^ 30-1