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


287

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


17
Google에서 여기를 보냈다면 MSDN SQL 데이터 형식 페이지 가 도움이 될 수 있습니다.
Jeroen

답변:


212

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

중대한

ntext, textimage데이터 형식은 이후 버전의 Microsoft SQL Server에서 제거됩니다. 새로운 개발 작업에서 이러한 데이터 유형을 사용하지 말고 현재 데이터 유형을 사용하는 응용 프로그램을 수정하십시오. 대신 nvarchar (max) , varchar (max)varbinary (max)를 사용하십시오.


3
감사합니다 Mladen, TEXT가 더 이상 사용되지 않는 것을보고 놀랐습니다. 이에 대한 공식 문서가 있습니까?
George2

1
이것은 "공식적인"것은 아니지만 기본을 다루고 있습니다. 텍스트는 실제로 감가 상각되며 검색 및 색인 기능과 같이 varchar (max)가 수행하는 모든 기능을 지원하지 않습니다. blog.sqlauthority.com/2007/05/26/…
achinda99


1
멋진 achinda99와 Mladen Prajdic! 당신이 제공 한 것은 내가 찾고있는 것입니다. :-) 질문 하나 더, 다른 상황에서 VARCHAR 또는 VARCHAR (MAX)를 사용할지 어떻게 선택합니까?
George2

1
이에 대한 공식 MS 정보는 더 이상 사용되지 않습니다 : msdn.microsoft.com/en-us/library/ms187993%28v=sql.90%29.aspx
Fanda

283

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옵션을 사용하십시오 .


2
1. "열의 값을 검색하지 않으면"- "검색"이 무엇을 의미하는지 알려줄 수 있습니까? 이 열을 선택하고,이 열을 정렬하거나,이 열을 좋아하거나,이 열에서 문자열 조작 기능을 사용하고 있습니까?
George2

2
2. "VARCHAR은 항상 행에 저장되며 8000 자로 제한됩니다." 죄송합니다. 동의하지 않습니다. VARCHAR은 8000보다 길 수 있으며 8000보다 길면 VARCHAR은 열 이외의 값으로 저장됩니다. 다른하실 말씀 있나요?
George2

1
3.이 글타래에서 언급 된 Mladen Prajdic는 TEXT 타입은 더 이상 사용되지 않지만, 이것에 대한 문서는 없습니다. 이를 다루는 문서가 있습니까?
George2

2
멋진 Quassnoi! 당신은 너무 알고 있습니다! :-) 하나 더 질문- "물론 이것은 SQL SERVER 2005와 TEXT의 동의어 인 VARCHAR (MAX)와 관련이 없습니다." "이것"은 무슨 뜻입니까?
George2

"물론 이것은 SQL SERVER 2005와 TEXT의 동의어 인 VARCHAR (MAX)와 관련이 없습니다." -TEXT가 SQL Server 2005의 VARCHAR과 동일하다는 문서가 있습니까? 검색을했지만 공식 문서를 찾을 수 없습니다. :-)
George2

41

SQL 서버 2005 새로운 데이터 유형은 소개했다 : varchar(max)그리고 nvarchar(max) 그들은 기존의 텍스트 형식의 장점을 가지고 : 그들은 데이터 2GB의 영업 이익을 포함 할 수 있지만 그들은 또한의 장점을 대부분 가지고 varcharnvarchar. 이러한 장점 중에는 substring ()과 같은 문자열 조작 함수를 사용할 수있는 기능이 있습니다.

또한 varchar (max)는 테이블의 디스크 / 메모리 공간에 저장되며 크기는 8Kb 미만입니다. 필드에 더 많은 데이터를 배치 할 때만 데이터가 테이블 공간에 저장됩니다. 테이블 공간에 저장된 데이터는 (보통) 더 빨리 검색됩니다.

간단히 말해서 (n) varchar (max)와 같은 더 나은 대안이 있으므로 Text를 사용하지 마십시오. 그리고 일반적인 varchar가 충분히 크지 않을 때, 즉 저장할 문자열이 8000자를 초과 할 것으로 예상되는 경우에만 varchar (max)를 사용하십시오.

언급했듯이 TEXT 데이터 유형에 SUBSTRING을 사용할 수 있지만 TEXT 필드에 8000 자 미만인 경우에만 가능합니다.


1
Edoode에게 감사드립니다. VARCHAR이 얼마나 좋은지, VARCHAR 사용시기 및 TEXT 사용시기에 대한 의견이나 아이디어가 있습니까? 내 질문은 2 호에서 1을 선택하는 것입니다. :-)
George2

1
실제로 MS SQL Server 2005에서는 SUBSTRING 및 기타 함수를 TEXT 열에서도 사용할 수 있습니다.
Quassnoi

1
감사합니다 Quassnoi! TEXT가 더 이상 사용되지 않는 것 같습니다. 질문 하나 더, 우리는 어떻게 다른 상황에서 VARCHAR 또는 VARCHAR (MAX)를 사용할지 선택합니까?
George2

1
일반 varchar가 충분히 크지 않은 경우에만 varchar (max)를 사용하십시오 (모든 사람에게
8Kb

7

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

3
변화? 새로운 데이터 유형이 도입 된 이후 이러한 용량은 변경되지 않았습니다.
Martin Smith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.