Tôi có dữ liệu ký tự có độ dài thay đổi và muốn lưu trữ trong cơ sở dữ liệu SQL Server (2005). Tôi muốn tìm hiểu một số thực tiễn tốt nhất về cách chọn loại SQL SQL hoặc chọn loại SQL VARCHAR, ưu và nhược điểm về hiệu suất / dấu chân / chức năng.
Tôi có dữ liệu ký tự có độ dài thay đổi và muốn lưu trữ trong cơ sở dữ liệu SQL Server (2005). Tôi muốn tìm hiểu một số thực tiễn tốt nhất về cách chọn loại SQL SQL hoặc chọn loại SQL VARCHAR, ưu và nhược điểm về hiệu suất / dấu chân / chức năng.
Câu trả lời:
Nếu bạn đang sử dụng SQL Server 2005 trở lên, hãy sử dụng varchar(MAX)
. Kiểu text
dữ liệu không được dùng nữa và không nên được sử dụng cho công việc phát triển mới. Từ các tài liệu :
Quan trọng
ntext
,text
vàimage
các loại dữ liệu sẽ bị xóa trong phiên bản tương lai của Microsoft SQL Server. Tránh sử dụng các loại dữ liệu 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 chúng. Sử dụng nvarchar (max) , varchar (max) và varbinary (max) thay thế.
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 ngoài hàng.
VARCHAR
luôn được lưu trữ theo hàng và có giới hạn 8000 ký tự. Nếu bạn cố gắng tạo một VARCHAR(x)
, trong đó x> 8000 , bạn sẽ gặp lỗi:
Máy chủ: Msg 131, Cấp 15, Bang 3, Dòng 1
Kích thước () được cung cấp cho loại 'varchar' vượt quá mức tối đa được phép cho bất kỳ loại dữ liệu nào (8000)
Những hạn chế chiều dài không quan tâm VARCHAR(MAX)
trong SQL Server 2005 , có thể được lưu trữ ra khỏi hàng, giống như TEXT
.
Lưu ý rằng đó MAX
không phải là một loại hằng số ở đây, VARCHAR
và VARCHAR(MAX)
là những loại rất khác nhau, loại thứ hai 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ể lấy TEXTPTR
và sử dụng nó trong READTEXT
và các WRITETEXT
chức năng.
Trong SQL Server 2005, bạn có thể truy cập trực tiếp TEXT
các cột (mặc dù bạn vẫn cần truyền rõ ràng VARCHAR
để gán giá trị cho chúng).
TEXT
tốt:
VARCHAR
tốt:
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 cột TEXT
hoặc VARCHAR
cột. Điều này bao gồm sử dụng nó trong bất kỳ JOIN
hoặc WHERE
điều kiện.
Vì 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ề những gì TEXT
tốt cho:
Một số ví dụ về những gì VARCHAR
tốt cho:
Theo nguyên tắc thông thường, nếu bạn cần giá trị văn bản vượt quá 200 ký tự VÀ không sử dụng nối trên cột này, hãy sử dụng TEXT
.
Nếu không thì sử dụng VARCHAR
.
PS Điều tương tự cũng áp dụng cho việc UNICODE
kích hoạt NTEXT
và NVARCHAR
cũng vậy, mà bạn nên sử dụng cho các ví dụ ở trên.
PPS cũng áp dụng như VARCHAR(MAX)
và NVARCHAR(MAX)
rằng SQL Server 2005 + sử dụng thay vì TEXT
và NTEXT
. Bạn sẽ cần kích hoạt large value types out of row
chúng 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à ở đây , TEXT
sẽ bị phản đối trong các phiên bản tương lai:
Các
text in row
tùy chọn sẽ được gỡ bỏ trong một 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ụngtext in row
. Chúng tôi khuyên bạn nên lưu trữ dữ liệu lớn bằngvarchar(max)
,nvarchar(max)
hoặcvarbinary(max)
kiểu dữ liệu. Để kiểm soát hành vi liên tiếp 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.
Trong máy chủ SQL 2005, các kiểu dữ liệu mới đã được giới thiệu: varchar(max)
và nvarchar(max)
chúng có những ưu điểm của kiểu văn bản cũ: chúng có thể chứa tới 2GB dữ liệu, nhưng chúng cũng có hầu hết các ưu điểm của varchar
và nvarchar
. Trong số những ưu điểm này là khả năng sử dụng các hàm thao tác chuỗi như chuỗi con ().
Ngoài ra, varchar (max) được lưu trữ trong không gian (đĩa / bộ nhớ) của bảng trong khi kích thước dưới 8Kb. Chỉ khi bạn đặt thêm dữ liệu vào trường, nó mới được lưu trữ ngoài không gian của bảng. Dữ liệu được lưu trữ trong không gian của bảng (thường) được truy xuất nhanh hơn.
Tóm lại, không bao giờ sử dụng Văn bản, vì có một cách thay thế tốt hơn: (n) varchar (max). Và chỉ sử dụng varchar (tối đa) khi một varchar thông thường không đủ lớn, tức là nếu bạn mong đợi chuỗi teh mà bạn sẽ lưu trữ sẽ vượt quá 8000 ký tự.
Như đã lưu ý, bạn có thể sử dụng SUBSTRING trên kiểu dữ liệu TEXT, nhưng chỉ khi các trường TEXT chứa ít hơn 8000 ký tự.
Đã có một số thay đổi lớn trong ms 2008 -> Có thể đáng xem xét bài viết sau khi đưa ra quyết định về loại dữ liệu sẽ sử dụng. http://msdn.microsoft.com/en-us/l Library / ms143432.aspx
Byte mỗi