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

Làm cách nào để bạn đạt đến giới hạn 8060 byte mỗi hàng và 8000 cho mỗi giá trị (varchar, nvarchar)?

Bên trong Công cụ Lưu trữ:Giải phẫu một bản ghi

Điều này dành cho SQL Server 2005

  • tiêu đề bản ghi
    • Dài 4 byte
    • hai byte siêu dữ liệu bản ghi (loại bản ghi)
    • hai byte trỏ về phía trước trong bản ghi tới bitmap NULL
  • phần độ dài cố định của bản ghi, chứa các cột lưu trữ các loại dữ liệu có độ dài cố định (ví dụ:bigint, char (10), datetime)
  • Bản đồ bit NULL
    • hai byte để đếm số cột trong bản ghi
    • số byte thay đổi để lưu trữ một bit trên mỗi cột trong bản ghi, bất kể cột đó có thể null hay không (điều này khác và đơn giản hơn so với SQL Server 2000 chỉ có một bit trên mỗi cột có thể nullable)
    • điều này cho phép tối ưu hóa khi đọc các cột NULL
  • mảng bù đắp cột có độ dài thay đổi
    • hai byte để đếm các cột có độ dài thay đổi
    • hai byte cho mỗi cột có độ dài thay đổi, tạo khoảng chênh lệch cho phần cuối của thẻ định giá trị cột
  • cái này chỉ có trong SQL Server 2005 và là cấu trúc 14 byte chứa dấu thời gian cộng với một con trỏ vào kho phiên bản trong tempdb

Vì vậy, đối với một ký tự (8000)

  • 4 byte (tiêu đề bản ghi)
  • 8000 chiều dài cố định
  • 3 bitmap rỗng
  • 2 byte để đếm độ dài thay đổi
  • 14 dấu thời gian

Tuy nhiên, nếu bạn có 40 cột varchar (200)

  • 4 byte (tiêu đề bản ghi)
  • 0 độ dài cố định
  • 6 bitmap rỗng
  • 2 byte để đếm độ dài thay đổi
  • 202 x 40 =8080
  • 14 dấu thời gian

Tổng =8080 + 4 + 6 + 2 + 14 =8106. WTF? Bạn nhận được cảnh báo khi tạo bảng này

Tôi sẽ không quá lo lắng về nó:thông tin này có không giá trị thực tế hàng ngày



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo mối quan hệ 1-1 thực sự trong SQL Server

  2. Cần liệt kê tất cả các trình kích hoạt trong cơ sở dữ liệu SQL Server với tên bảng và lược đồ của bảng

  3. Máy chủ SQL SHOWPLAN_TEXT

  4. Cách lấy danh sách các ràng buộc kiểm tra được bật / tắt trong cơ sở dữ liệu SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 86

  5. Tạo một hàm có giá trị bảng nội tuyến (ITVF) trong SQL Server