[sql-server] SQL Server 텍스트 형식과 varchar 데이터 형식 [닫힘]

가변 길이 문자 데이터가 있고 SQL Server (2005) 데이터베이스에 저장하려고합니다. TEXT SQL 유형을 선택하거나 VARCHAR SQL 유형, 성능 / 발자국 / 기능의 장단점을 선택하는 방법에 대한 모범 사례를 배우고 싶습니다.



답변

SQL Server 2005 이상을 사용하는 경우을 사용하십시오 varchar(MAX). text데이터 형식은 더 이상 사용되지 않으며 새 개발 작업에 사용되어서는 안된다. 에서 워드 프로세서 :

중대한

ntext, textimage데이터 형식은 이후 버전의 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 2005TEXT.

참고 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의 영업 이익을 포함 할 수 있지만 그들은 또한의 장점을 대부분 가지고 varcharnvarchar. 이러한 장점 중에는 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

당 바이트

  1. varchar (max), varbinary (max), xml, text 또는 image 열 2 ^ 31-1 2 ^ 31-1
  2. nvarchar (최대) 열 2 ^ 30-1 2 ^ 30-1

답변