TEXT
được sử dụng cho các phần lớn dữ liệu chuỗi. Nếu độ dài của trường vượt quá một ngưỡng nhất định, văn bản sẽ được lưu trữ ngoài hàng.
VARCHAR
luôn được lưu trữ trong hàng và có giới hạn là 8000 nhân vật. Nếu bạn cố tạo VARCHAR(x)
, trong đó x> 8000 , bạn gặp lỗi:
Máy chủ:Msg 131, Mức 15, Trạng thái 3, Dòng 1
Kích thước () được cung cấp cho kiểu ‘varchar’ vượt quá mức tối đa cho phép đối với bất kỳ kiểu dữ liệu nào (8000)
Các giới hạn về độ dài này không liên quan đến VARCHAR(MAX)
trong SQL Server 2005 , có thể được lưu trữ ngoài hàng, giống như TEXT
.
Lưu ý rằng MAX
ở đây không phải là một loại hằng số, VARCHAR
và VARCHAR(MAX)
là các loại rất khác nhau, loại sau rất gần với TEXT
.
Trong các phiên bản trước của SQL Server bạn không thể truy cập TEXT
trực tiếp, bạn chỉ có thể nhận được TEXTPTR
và sử dụng nó trong READTEXT
và WRITETEXT
các chức năng.
Trong SQL Server 2005 bạn có thể truy cập trực tiếp vào TEXT
cột (mặc dù bạn vẫn cần truyền rõ ràng tới VARCHAR
để gán một giá trị cho chúng).
TEXT
tốt:
- Nếu bạn cần lưu trữ các văn bản lớn trong cơ sở dữ liệu của mình
- Nếu bạn không tìm kiếm giá trị của cột
- Nếu bạn hiếm khi chọn cột này và không tham gia vào cột đó.
VARCHAR
tốt:
- Nếu bạn lưu trữ các chuỗi nhỏ
- Nếu bạn tìm kiếm giá trị chuỗi
- Nếu bạn luôn chọn nó hoặc sử dụng nó trong các lần tham gia.
Bằng cách chọn ở đây tôi có nghĩa là đưa ra bất kỳ truy vấn nào trả về giá trị của cột.
Bằng cách tìm kiếm ở đây tôi có nghĩa là đưa ra bất kỳ truy vấn nào có kết quả phụ thuộc vào giá trị của TEXT
hoặc VARCHAR
cột. Điều này bao gồm việc sử dụng nó trong bất kỳ JOIN
nào hoặc WHERE
điều kiện.
Dưới dạng TEXT
được lưu trữ ngoài hàng, các truy vấn không liên quan đến TEXT
cột thường nhanh hơn.
Một số ví dụ về cái gì TEXT
tốt cho:
- Nhận xét trên blog
- Trang Wiki
- Nguồn mã
Một số ví dụ về cái gì VARCHAR
tốt cho:
- Tên người dùng
- Tiêu đề trang
- Tên tệp
Theo quy tắc chung, nếu bạn cần, giá trị văn bản của bạn phải vượt quá 200 ký tự VÀ không sử dụng phép nối trên cột này, hãy sử dụng TEXT
.
Nếu không, hãy sử dụng VARCHAR
.
Tái bút Điều tương tự cũng áp dụng cho UNICODE
đã bật NTEXT
và NVARCHAR
cũng như bạn nên sử dụng cho các ví dụ ở trên.
P.P.S. Điều tương tự cũng áp dụng cho VARCHAR(MAX)
và NVARCHAR(MAX)
rằng SQL Server 2005+ sử dụng thay vì TEXT
và NTEXT
. Bạn sẽ cần bật large value types out of row
cho họ với sp_tableoption
nếu bạn muốn chúng luôn được lưu trữ ngoài hàng.
Như đã đề cập ở trên và tại đây , TEXT
sẽ không được dùng nữa trong các bản phát hành trong tương lai:
text in row
tùy chọn sẽ bị xóa trong phiên bản tương lai của SQL Server . Tránh sử dụng tùy chọn này trong công việc phát triển mới và lên kế hoạch sửa đổi các ứng dụng hiện đang sử dụng văn bảntext in row
. Chúng tôi khuyên bạn nên lưu trữ dữ liệu lớn bằng cách sử dụngvarchar(max)
,nvarchar(max)
hoặcvarbinary(max)
Loại dữ liệu. Để kiểm soát hành vi trong hàng và ngoài hàng của các loại dữ liệu này, hãy sử dụnglarge value types out of row
tùy chọn.