2009-04-10 52 views
12

Tôi đã thừa kế một dự án trang web asp.net hiện đang chạy SQL Server 2000 làm chương trình phụ trợ của nó.varchar (tối đa) MS SQL Server 2000, vấn đề?

Tôi đã thực hiện một số thay đổi về cơ sở dữ liệu trên bản sao cục bộ của db bằng SQL Server 2005 Express. Tôi đã tạo một bảng bằng cách sử dụng các cột varchar(max). Chúng được sử dụng để lưu trữ các đoạn mã XHTML có độ dài tùy ý.

Trong khi duyệt khoảng trên stackoverflow tôi đi qua này: Are there any disadvantages to always using nvarchar(MAX)?

tài mattruma cho biết ông phát hiện ra "con đường khó" về việc sử dụng varchar(max) trên SQL Server 2000.

Tôi nên sử dụng thay vì varchar(max) cho rằng cơ sở dữ liệu trực tiếp chạy trên SQL Server 2000?

Cảm ơn bạn đã giúp đỡ!

Trả lời

11

Nghe có vẻ như giới hạn varchar(MAX) là điểm tranh luận nếu DB trực tiếp của bạn là SQL Server 2000, không hỗ trợ chúng. Nếu bạn có nhiều hơn 8K ký tự để lưu trữ, bạn có khá nhiều thứ còn lại với tùy chọn duy nhất khác, một cột TEXT. Tuy nhiên, hãy cẩn thận rằng các cột TEXT cũng có nhiều hạn chế.

Ví dụ: bạn không thể sắp xếp hoặc nhóm chúng một cách dễ dàng, cũng như bạn có thể so sánh chúng tương đương với các cột khác. Đó là bạn không thể nói Select * from mytable where Mytext1 = mytext2.

mối quan tâm liên quan khác:

  • tôi muốn đề nghị sử dụng một cột NText hoặc NVarchar không phụ thuộc vào cách bạn đi để hỗ trợ Unicode.
  • Nếu bảng có nhiều cột khác và cột varchar(8000) có thể thường xuyên gần đầy, bạn có thể gặp sự cố với giới hạn hàng là 8K. Hãy ghi nhớ điều này.
1

Sử dụng cột TEXT.

+0

Nếu bạn sử dụng trường Văn bản, nó sẽ cản trở các tìm kiếm có thể có trên trường đó. – TheTXI

+0

@TheTXI - không có gì trong câu hỏi của OP liên quan đến tìm kiếm trên cột đó. –

+0

Tôi sẽ không khuyên bạn nên sử dụng kiểu dữ liệu TEXT, bởi vì [nó sẽ được loại bỏ trong một phiên bản tương lai của Microsoft SQL Server] (http://msdn.microsoft.com/en-us/library/ms187993.aspx). –

15

VARCHAR(Max) đã được giới thiệu trong SQL Server 2005 và sẽ không hoạt động trên SQL Server 2000. Bạn cần sử dụng VARCHAR(8000) giả định rằng sẽ đủ lớn. Nếu không, bạn sẽ cần phải sử dụng TEXT

Sửa

Ngoài ra nếu bạn chuyển sang VARCHAR(8000) ghi nhớ có một giới hạn mà một hàng duy nhất không thể có nhiều hơn thì 8060 byte. Vì vậy, nếu bạn điền vào một bảng varchar(8000) và có một loạt các cột lớn khác, bạn sẽ nhận được một lỗi. Đây là nơi Text có sẵn.

Text có hàm ý hiệu suất vì theo mặc định nó được lưu trữ ở một vị trí riêng biệt và giữ con trỏ trong bảng. Có một tùy chọn được đặt để thay đổi hành vi này để các loại văn bản được lưu giữ trong bảng cho đến khi chúng đạt đến một kích thước nhất định. Nếu bạn có hầu hết các đốm nhỏ, bạn có thể muốn kích hoạt tính năng này.

+0

Chúng tôi phải chuyển sang VARCHAR (8000). – mattruma

0

Điều này tùy thuộc vào nhu cầu của bạn. Bạn có thể sử dụng cột TEXT thay vì VARCHAR (MAX) nhưng bạn phải chắc chắn rằng việc triển khai của bạn không cần phải tìm kiếm trên trường đó, vì bạn không thể làm như so sánh trên các trường TEXT và NTEXT.

Nếu bạn có thể giới hạn mình là 8000 ký tự, tôi sẽ sử dụng cột VARCHAR (8000) để lưu trữ thông tin.

+0

nvarchar (4000) có nghĩa là gì? Hoặc varchar (8000)? – gbn

+0

bắt tốt, tôi đã cập nhật phản hồi. –

Các vấn đề liên quan