Saat ini dalam database SQL Server 2012 kami, kami gunakan varchar
, dan kami ingin mengubahnya nvarchar
. Saya telah membuat skrip untuk melakukan itu.
Pertanyaan saya adalah apakah ada perbedaan dalam cara SQL Server menulis ke varchar
kolom vs. nvarchar
kolom? Kami memiliki sejumlah prosedur backend yang saya khawatirkan.
Sunting:
Tidak yakin apakah ini membantu, tetapi kolom tidak memiliki indeks, f / k, atau kendala pada mereka.
sql-server
varchar
Chris L
sumber
sumber
Jawaban:
Anda harus yakin bahwa Anda awalan string Unicode literal dengan awalan N. Misalnya ini akan bekerja secara berbeda jika tipe data yang mendasarinya adalah
NVARCHAR
:Hasil:
Bagi mereka yang menggunakan perangkat seluler atau browser jompo yang menampilkan karakter kotak alih-alih karakter Unicode yang sebenarnya, seperti inilah tampilannya:
sumber
Perhatian terbesar adalah yang
nvarchar
menggunakan 2 byte per karakter, sedangkanvarchar
menggunakan 1. Dengan demikian,nvarchar(4000)
menggunakan jumlah ruang penyimpanan yang sama denganvarchar(8000)
*.Selain semua data karakter Anda yang membutuhkan ruang penyimpanan dua kali lebih banyak, ini juga berarti:
nvarchar
kolom yang lebih pendek untuk menjaga baris dalam batas kolom 8060 byte / 8000 byte karakter kolom.nvarchar(max)
kolom, kolom itu akan didorong lebih cepat daripada yangvarchar(max)
seharusnya.nvarchar
kolom yang lebih pendek untuk tetap berada dalam batas kunci indeks 900-byte (saya tidak tahu mengapa Anda ingin menggunakan kunci indeks yang besar, tetapi Anda tidak pernah tahu).Selain itu, bekerja dengan
nvarchar
tidak jauh berbeda, dengan asumsi perangkat lunak klien Anda dibuat untuk menangani Unicode. SQL Server akan secara transparan mengkonversivarchar
kenvarchar
, jadi Anda tidak benar-benar membutuhkan awalan N untuk literal string kecuali jika Anda menggunakan karakter 2-byte (yaitu Unicode) dalam literal. Sadarilah bahwa pengecorannvarchar
untukvarbinary
menghasilkan hasil yang berbeda daripada melakukan hal yang sama denganvarchar
. Poin penting adalah bahwa Anda tidak harus segera mengubah setiap varchar literal ke nvarchar literal agar aplikasi tetap berfungsi, yang membantu mempermudah proses.* Jika Anda menggunakan kompresi data (kompresi baris ringan sudah cukup, Edisi Enterprise diperlukan sebelum SQL Server 2016 SP1 ) Anda biasanya akan menemukan
nchar
dannvarchar
tidak mengambil lebih banyak ruang daripadachar
danvarchar
, karena kompresi Unicode (menggunakan algoritma SCSU) .sumber
Pikirkan yang berikut ini adalah perbedaan utama:
sumber
nvarchar diperlukan untuk Replikasi Penggabungan RDP dari Mobile DB ke SQL Server 2005. Juga LTrim (), RTrim () & Trim () banyak digunakan bc nvarchar tidak secara otomatis memangkas () ruang dari entri data, sedangkan Varchar tidak .
Saya tidak tahu apakah itu telah berubah dalam beberapa tahun terakhir atau tidak, tetapi nvarchar sekarang menjadi standar yang digunakan untuk login .NET Simple Membership Website di VS Pro 2017 yang digunakan dalam database yang dihasilkan.
sumber
Jika Anda menggunakan NVarchar lebih dari Varchar dan Anda tidak memiliki persyaratan untuk mendukung MULTI-LINQUAL, Anda meningkatkan penyimpanan untuk DB, Cadangan (lokal dan luar lokasi). Database modern harus mendukung keduanya dan setiap klik Konversi harus dipertimbangkan dalam desain.
sumber