Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Kiểu văn bản SQL Server so với kiểu dữ liệu varchar

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ố, VARCHARVARCHAR(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 READTEXTWRITETEXT 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ự 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 NTEXTNVARCHAR 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)NVARCHAR(MAX) rằng SQL Server 2005+ sử dụng thay vì TEXTNTEXT . 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ản text 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ụng varchar(max) , nvarchar(max) hoặc varbinary(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ụng large value types out of row tùy chọn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dấu thời gian Chèn và Cập nhật hàng trong SQL Server 2008

  2. Làm cách nào để nối nhiều hàng có cùng id trong sql?

  3. Làm cách nào để kích hoạt MSDTC trên SQL Server?

  4. Giải pháp cho cách đọc tệp nhật ký giao dịch SQL Server mà không có bất kỳ lỗi nào

  5. Khôi phục SQL Server 2017