Rumah > pangkalan data > tutorial mysql > Mengapa NVARCHAR(MAX) Masih Memotong Rentetan Saya dalam Pelayan SQL?

Mengapa NVARCHAR(MAX) Masih Memotong Rentetan Saya dalam Pelayan SQL?

Linda Hamilton
Lepaskan: 2025-01-06 20:15:41
asal
289 orang telah melayarinya

Why Does NVARCHAR(MAX) Still Truncate My Strings in SQL Server?

"Pemotongan NVARCHAR(MAX) Masih Berlaku: Memahami Penukaran Tersirat"

Walaupun terdapat tanggapan salah bahawa NVARCHAR(MAX) dalam versi SQL Server moden memegang data yang besar, pengguna mungkin menghadapi pemotongan kepada 4000 aksara seperti dalam ini contoh:

DECLARE @Query NVARCHAR(max);
SET @Query = 'SELECT...' -- some of the query gets set here
SET @Query = @Query + '...' -- more query gets added on, etc.

-- later on...
PRINT LEN(@Query) -- Prints out 4273, which is correct as far as I can tell
PRINT @Query      -- Truncates value to 4000 characters
EXEC sp_executesql @Query -- totally crashes due to malformed (truncated) query
Salin selepas log masuk

Punca Punca: Penukaran Tersirat

Isu ini berpunca daripada penukaran tersirat. Apabila menggabungkan rentetan dengan aksara Unicode, SQL Server secara automatik menukar keputusan kepada NVARCHAR(4000) tanpa amaran atau tanda pemotongan. Ini berlaku walaupun apabila pembolehubah yang diisytiharkan untuk menyimpan hasilnya ialah NVARCHAR(MAX).

Penyelesaian: Menguatkuasakan Penukaran Eksplisit

Untuk mengelakkan penukaran tersirat dan memastikan pengekalan besar data, sentiasa pra-gabungkan menggunakan CAST:

SET @Query = CAST('' as nVarChar(MAX)) -- Force implicit conversion to nVarChar(MAX)
           + 'SELECT...' -- some of the query gets set here
           + '...' -- more query gets added on, etc.
Salin selepas log masuk

Dengan menghantar rentetan kosong ke NVARCHAR(MAX), SQL Server secara eksplisit diarahkan untuk mengendalikan keseluruhan rentetan sebagai NVARCHAR(MAX). Ini menghapuskan isu pemangkasan.

Pertimbangan Lain

  • Elakkan rentetan literal yang lebih panjang daripada 4000 aksara (atau 8000 untuk VarChar) untuk mengelakkan pemotongan.
  • Pecahkan rentetan yang besar kepada bahagian yang lebih kecil untuk memastikan kejayaan penyatuan.

Atas ialah kandungan terperinci Mengapa NVARCHAR(MAX) Masih Memotong Rentetan Saya dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan