SQL Server에서 nvarchar(max)
vs. NText
데이터 형식 을 사용할 때의 장단점은 무엇입니까 ? 이전 버전과의 호환성이 필요하지 않으므로 nvarchar(max)
이전 SQL Server 릴리스에서 지원되지 않는 것이 좋습니다.
편집 : 분명히 문제도 적용 TEXT
하고 IMAGE
대 varchar(max)
하고 varbinary(max)
나중에 그 데이터 유형에 대한 그 검색을 위해.
답변
장점은 같은 기능을 사용할 수 있습니다 LEN
과 LEFT
에 nvarchar(max)
당신이 그 상대로 할 수 없습니다 ntext
와 text
. 사용했던 곳 nvarchar(max)
보다 작업하기가 더 쉽습니다.text
WRITETEXT
과 UPDATETEXT
.
또한 text
, ntext
등이 중단되고 ( http://msdn.microsoft.com/en-us/library/ms187993.aspx )
답변
VARCHAR(MAX)
TEXT
필드 를 수용하기에 충분히 큽니다 . TEXT
, NTEXT
및 IMAGE
SQL 서버 2000의 데이터 형식은 SQL Server의 향후 버전에서 SQL Server 2005의 데이터 유형에 대한 이전 버전과의 호환성을 제공을 더 이상 사용되지 않습니다 있지만있는 새로운 데이터 유형을 사용하는 것이 좋습니다 VARCHAR(MAX)
, NVARCHAR(MAX)
그리고 VARBINARY(MAX)
.
답변
ntext
데이터는 항상 별도의 데이터베이스 페이지 nvarchar(max)
에 저장되는 반면 데이터베이스 레코드 자체 내에 데이터를 저장하려고합니다.
그래서 nvarchar(max)
약간 더 빠릅니다 (텍스트가 8kB보다 작은 경우). 또한 데이터베이스 크기가 약간 느리게 증가한다는 것을 알았습니다.
간다 nvarchar(max)
.
답변
nvarchar(max)
당신이 사용하고 싶은 것입니다. 가장 큰 장점은이 데이터 유형에서 모든 T-SQL 문자열 함수를 사용할 수 있다는 것입니다. 에서는 사용할 수 없습니다 ntext
. 나는 실제 단점을 알지 못한다.
답변
답변
의 가장 큰 단점 Text
(함께 NText
하고 Image
)이하는 것과 같이 SQL Server의 이후 버전에서 제거 될 것입니다 문서 . 그러면 해당 버전의 SQL Server가 릴리스 될 때 스키마를 효과적으로 업그레이드하기가 더 어려워집니다.
답변
전환에 대한 경험을 추가하고 싶었습니다. text
고대 Linq2SQL 코드 에는 많은 필드 가있었습니다 . 이것은 text
인덱스에있는 열을 온라인 으로 재 구축 할 수 있도록 하기위한 것 입니다.
먼저 몇 년 동안의 이점에 대해 알고 있었지만 항상 변환은 SQL Server가 테이블을 다시 작성하고 모든 것을 복사하여 웹 사이트를 중단시키고 내 심박수를 올리는 무서운 긴 쿼리를 의미한다고 가정했습니다.
Linq2SQL이 열 유형에 대해 일종의 확인을 수행하는 경우 오류가 발생할 수 있다고 우려했습니다.
그러나 ALTER 명령이 즉시 반환되었으므로 테이블 메타 데이터 만 변경하고 있다는 사실 만보고하면 좋을 것입니다. <8000 자 데이터를 다시 테이블로 가져 오는 오프라인 작업이있을 수 있지만 ALTER 명령은 즉시 수행되었습니다.
변환이 필요한 모든 열을 찾으려면 다음을 실행했습니다.
SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] VARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'TEXT' order by table_name, column_name
SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] NVARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'NTEXT' order by table_name, column_name
이것은 나에게 좋은 쿼리 목록을 주며 방금 선택하여 새 창에 복사했습니다. 내가 말했듯이-이것은 즉시 실행되었습니다.
Linq2SQL은 매우 고대입니다. 테이블을 끌어 오는 디자이너를 사용합니다. EF 코드의 경우 상황이 더 복잡 할 수 있지만 아직 다루지 않았습니다.