Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana Anda mencapai batas 8060 byte per baris dan nilai 8000 per (varchar, nvarchar)?

Di dalam Mesin Penyimpanan:Anatomi catatan

Ini untuk SQL Server 2005

  • rekaman tajuk
    • panjang 4 byte
    • dua byte metadata rekaman (tipe rekaman)
    • dua byte mengarah ke depan dalam catatan ke bitmap NULL
  • bagian dengan panjang tetap dari catatan, berisi kolom yang menyimpan tipe data yang memiliki panjang tetap (misalnya bigint, char(10), datetime)
  • Bitmap NULL
    • dua byte untuk jumlah kolom dalam catatan
    • jumlah variabel byte untuk menyimpan satu bit per kolom dalam catatan, terlepas dari apakah kolom tersebut dapat dibatalkan atau tidak (ini berbeda dan lebih sederhana dari SQL Server 2000 yang hanya memiliki satu bit per kolom yang dapat dibatalkan)
    • ini memungkinkan pengoptimalan saat membaca kolom yang NULL
  • array offset kolom dengan panjang variabel
    • dua byte untuk jumlah kolom dengan panjang variabel
    • dua byte per kolom panjang variabel, memberikan offset ke akhir tag valueversioning kolom
  • ini hanya di SQL Server 2005 dan merupakan struktur 14-byte yang berisi stempel waktu plus penunjuk ke penyimpanan versi di tempdb

Jadi, untuk satu karakter(8000)

  • 4 byte (tajuk rekaman)
  • 8000 panjang tetap
  • 3 bitmap nol
  • 2 byte untuk menghitung panjang variabel
  • 14 stempel waktu

Namun, jika Anda memiliki 40 kolom varchar(200)

  • 4 byte (tajuk rekaman)
  • 0 panjang tetap
  • 6 bitmap nol
  • 2 byte untuk menghitung panjang variabel
  • 202 x 40 =8080
  • 14 stempel waktu

Total =8080 + 4 + 6 + 2 + 14 =8106. WTF? Anda mendapatkan peringatan saat membuat tabel ini

Saya tidak akan terlalu terpaku padanya:informasi ini tidak nilai praktis sehari-hari



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memahami Pernyataan SQL Server ALTER TABLE ADD COLUMN

  2. Apa yang Baru di SQL Server 2019?

  3. Pengelompokan SQL berdasarkan bulan dan tahun

  4. Cara Menemukan Bahasa Default Pengguna di SQL Server (T-SQL)

  5. Memperkenalkan Fitur Baru:Always On Availability Group