Memahami SQL NVARCHAR dan Pengehadan VARCHAR dan Pemangkasan
Pertanyaan SQL dinamik selalunya terkena had panjang rentetan yang tidak dijangka. Walaupun NVARCHAR(MAX)
secara teorinya menyimpan lebih 2GB data, batasan praktikal wujud, terutamanya dengan penggabungan. Artikel ini menjelaskan had ini dan menyediakan penyelesaian untuk mencegah pemotongan.
Tingkah Laku Pemangkasan dalam Gabungan
Hasil penggabungan rentetan sangat bergantung pada jenis data yang terlibat:
varchar(n)
varchar(n)
: Pemangkasan berlaku pada 8,000 aksara.nvarchar(n)
nvarchar(n)
: Pemangkasan berlaku pada 4,000 aksara.varchar(n)
nvarchar(n)
: Pemangkasan berlaku pada 4,000 aksara.[n]varchar(max)
[n]varchar(max)
: Tiada pemotongan (di bawah had 2GB).varchar(max)
varchar(n)
: Tiada pemotongan (di bawah had 2GB), mengakibatkan varchar(max)
.varchar(max)
nvarchar(n)
: varchar(n)
ditukar kepada nvarchar(n)
. Pemangkasan kepada nvarchar(4000)
berlaku jika varchar(n)
melebihi 4,000 aksara.nvarchar(max)
varchar(n)
: varchar(n)
ditukar kepada nvarchar(n)
. Tiada pemangkasan (di bawah had 2GB).Jenis Data Huruf Rentetan
N'string'
(dengan awalan N
): Dianggap sebagai nvarchar(n)
, dengan n
ialah panjang rentetan.'string'
(tanpa awalan N
):varchar(n)
jika panjang ≤ 8,000 aksara.varchar(max)
jika panjang > 8,000 aksara.Mencegah Pemangkasan
Untuk mengelakkan masalah pemangkasan:
NVARCHAR(MAX)
secara konsisten: Satukan sahaja NVARCHAR(MAX)
rentetan.N
.NVARCHAR(MAX)
: Isytiharkan pembolehubah sebagai NVARCHAR(MAX)
dari mula:<code class="language-sql">DECLARE @SQL NVARCHAR(MAX) = ''; SET @SQL = @SQL + N'Foo' + N'Bar';</code>
Memeriksa Rentetan Terpenggal
Untuk melihat sepenuhnya rentetan yang berpotensi dipotong:
<code class="language-sql">DECLARE @SQL NVARCHAR(MAX) = ''; SET @SQL = @SQL + N'Foo' + N'Bar';</code>
Pendekatan ini secara berkesan memintas sekatan panjang untuk tujuan paparan.
Atas ialah kandungan terperinci Apakah had dan gelagat pemotongan SQL NVARCHAR dan VARCHAR, dan bagaimana saya boleh menyelesaikan isu pemotongan dalam pertanyaan SQL dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!