Dari dokumen Microsoft ini , +
n mendefinisikan panjang string dan dapat berupa nilai dari 1 hingga 8.000. maks menunjukkan bahwa ukuran penyimpanan maksimum adalah 2 ^ 31-1 byte (2 GB). Ukuran penyimpanan adalah panjang sebenarnya dari data yang dimasukkan + 2 byte.
Tolong bantu saya memahami ini.
Karakter maksimal untuk varchar tampaknya 8000
, yang jauh lebih sedikit dari 2GB
nilai data.
Saya melihat bahwa ada catatan di varchar(max)
kolom ini dari tabel tertentu yang memiliki len(mycolumn)
> 100.000. Jadi saya tahu saya bisa mendapatkan lebih dari 8000
karakter ke dalam varchar(max)
kolom.
Pertanyaan 1: Bagaimana 8000
karakter dimainkan dan di mana saya harus menyadarinya?
Pertanyaan 2 : apakah kueri datareader .net ke kolom ini akan selalu mengembalikan hasil lengkap dengan 100.000 karakter?
sumber
varchar(max)
pernah dipanggiltext
dan diperlakukan sebagai tipe data yang berbeda.Jawaban:
Saya bisa melihat mengapa Anda salah paham tentang ini - ini agak rumit. Ini semua valid:
Dan ya, jika Anda mencoba untuk mendapatkan data dari bidang VARCHAR (MAX), dan seseorang menyimpan 2GB di sana, pasang sabuk pengaman.
sumber
and somebody stored 2GB in there, buckle up.
- Pernah ke sana dengan beberapa file gumpalanPengaturan n hingga 8000 menyebabkan 8000 karakter ikut bermain. Anda perlu mengetahui referensi Presisi, Skala, dan Panjang (Transact-SQL) tentang char, nchar, nvarchar, dan varchar. Sebaliknya, pengaturan n ke max (tanpa tanda kutip) menyebabkan SQL Server untuk menyimpan (dan mengembalikan) jumlah byte maksimum (seperti yang disebutkan dalam kutipan Anda).
Ini adalah pertanyaan .Net (bukan SQL Server), tetapi datareader .Net mengambil aliran byte. Byte bukan karakter, dan SQL Server mengembalikan byte (bukan karakter). Jika n diatur ke 8000 dan tipe data adalah nvarchar, SQL Server mengembalikan hingga 8000 byte, yang dapat ditafsirkan oleh .Net datareader menjadi 4000 karakter Unicode. Jika n diatur ke 8000 dan tipe data adalah varchar, SQL Server mengembalikan hingga 8000 byte, yang dapat ditafsirkan oleh .Net datareader hingga 8000 karakter ANSI. Jika n diatur ke maks dan tipe datanya adalah nvarchar, SQL Server mengembalikan hingga 2 ^ 31-1 byte, yang dapat ditafsirkan oleh datareader .Net hingga (2 ^ 31-1) / 2 karakter. Jika n diatur ke max dan tipe data adalah varchar, SQL Server mengembalikan hingga 2 ^ 31-1 byte, yang dapat ditafsirkan oleh datareader .Net hingga 2 ^ 31-1 karakter ANSI.
Jika Anda memilih menggunakan char atau varchar (bukan nchar atau nvarchar) karena mereka dapat menyimpan lebih banyak "karakter" (lebih akurat: byte), Anda harus menyadari bahwa banyak karakter Unicode tidak memiliki karakter ANSI yang setara (dengan demikian sebagian besar dari kami pengguna dunia tidak akan dapat melihat karakter lokal / asli mereka di aplikasi Anda).
sumber