Apa kelebihan dan kekurangan menggunakan tipe data nvarchar(max)
vs. NText
dalam SQL Server? Saya tidak perlu kompatibilitas ke belakang, jadi tidak apa-apa yang nvarchar(max)
tidak didukung dalam rilis SQL Server yang lebih lama.
Sunting: Rupanya pertanyaan itu juga berlaku untuk TEXT
dan IMAGE
vs. varchar(max)
dan varbinary(max)
, bagi mereka yang mencari tipe data itu nanti.
sql-server
sql-server-2005
sql-server-2008
text
nvarchar
David Pfeffer
sumber
sumber
VARCHAR(MAX)
cukup besar untuk menampungTEXT
lapangan.TEXT
,NTEXT
danIMAGE
tipe data SQL Server 2000 akan ditinggalkan dalam versi SQL Server yang akan datang, SQL Server 2005 menyediakan kompatibilitas mundur untuk tipe data tetapi disarankan untuk menggunakan tipe data baru yaituVARCHAR(MAX)
,NVARCHAR(MAX)
danVARBINARY(MAX)
.sumber
ntext
akan selalu menyimpan datanya di halaman basis data terpisah, sementaranvarchar(max)
akan mencoba menyimpan data dalam catatan basis data itu sendiri.Begitu
nvarchar(max)
agak lebih cepat (jika Anda memiliki teks yang lebih kecil seperti 8 kB). Saya juga memperhatikan bahwa ukuran basis data akan tumbuh sedikit lebih lambat, ini juga bagus.Go
nvarchar(max)
.sumber
nvarchar(max)
adalah apa yang ingin Anda gunakan. Keuntungan terbesar adalah bahwa Anda dapat menggunakan semua fungsi string T-SQL pada tipe data ini. Ini tidak mungkin denganntext
. Saya tidak mengetahui adanya kerugian nyata.sumber
nvarchar(max)
tetapi membatasi saya untuk 4000 karakter. Bagaimana jika saya ingin sebuah bidang menampung lebih dari itu?nvarchar(max)
4000 karakter saya. Jadi untuk SQL Server Compact, saya tidak punya pilihan selain menggunakanntext
dalam beberapa kasus. Ketika mereka menghentikannya, saya kira saya harus tidak memperbarui beberapa situs.Anda seharusnya menggunakan
nvarchar(max)
:MSDN
sumber
Kerugian terbesar dari
Text
(bersama-sama denganNText
danImage
) adalah bahwa ia akan dihapus dalam versi SQL Server di masa depan, seperti pada dokumentasi . Itu secara efektif akan membuat skema Anda lebih sulit untuk ditingkatkan ketika versi SQL Server itu akan dirilis.sumber
Ingin menambahkan pengalaman saya dengan mengonversi. Saya memiliki banyak
text
bidang dalam kode Linq2SQL kuno. Ini untuk memungkinkantext
kolom yang ada dalam indeks untuk dibangun kembali ONLINE .Pertama, saya sudah tahu tentang manfaat selama bertahun-tahun, tetapi selalu berasumsi bahwa konversi akan berarti beberapa pertanyaan panjang yang menakutkan di mana SQL Server harus membangun kembali tabel dan menyalin semuanya, menjatuhkan situs web saya dan meningkatkan detak jantung saya.
Saya juga khawatir bahwa Linq2SQL dapat menyebabkan kesalahan jika melakukan semacam verifikasi jenis kolom.
Senang melaporkan, bahwa perintah ALTER dikembalikan INSTAN - jadi mereka pasti hanya mengubah metadata tabel. Mungkin ada beberapa pekerjaan offline yang terjadi untuk mengembalikan <8000 data karakter ke dalam tabel, tetapi perintah ALTER instan.
Saya menjalankan yang berikut untuk menemukan semua kolom yang membutuhkan konversi:
Ini memberi saya daftar pertanyaan yang bagus, yang baru saja saya pilih dan salin ke jendela baru. Seperti saya katakan - menjalankan ini instan.
Linq2SQL cukup kuno - menggunakan desainer yang Anda tarik tabel. Situasinya mungkin lebih kompleks untuk Kode EF terlebih dahulu tetapi saya belum mengatasinya.
sumber
Saya ingin menambahkan bahwa Anda dapat menggunakan klausa .WRITE untuk pembaruan sebagian atau penuh dan menambahkan kinerja tinggi untuk
varchar(max)/nvarchar(max)
tipe data.Di sini Anda dapat menemukan contoh lengkap penggunaan
.WRITE
klausa.sumber