了解 SQL NVARCHAR 和 VARCHAR 限制和截斷
動態 SQL 查詢經常會遇到意外的字串長度限制。雖然 NVARCHAR(MAX)
理論上可容納超過 2GB 的數據,但實際存在局限性,尤其是在串聯方面。 本文闡明了這些限制並提供了防止截斷的解決方案。
串聯中的截斷行為
字串連接的結果在很大程度上取決於所涉及的資料類型:
varchar(n)
varchar(n)
: 8,000 個字元處發生截斷。 nvarchar(n)
nvarchar(n)
: 4,000 個字元處發生截斷。 varchar(n)
nvarchar(n)
: 4,000 個字元處發生截斷。 [n]varchar(max)
[n]varchar(max)
: 不截斷(低於 2GB 限制)。 varchar(max)
varchar(n)
: 沒有截斷(低於 2GB 限制),導致 varchar(max)
.varchar(max)
nvarchar(n)
: varchar(n)
轉換為 nvarchar(n)
。如果 nvarchar(4000)
超過 4,000 個字符,則會被截斷為 varchar(n)
。 nvarchar(max)
varchar(n)
: varchar(n)
轉換為 nvarchar(n)
。無截斷(低於 2GB 限制)。 字串文字的資料型別
N'string'
(有 N
字首): 視為 nvarchar(n)
,其中 n
是字串長度。 'string'
(沒有 N
字首):varchar(n)
如果長度 ≤ 8,000 個字元。 varchar(max)
如果長度 > 8,000 個字元。 防止截斷
為了避免截斷問題:
NVARCHAR(MAX)
: 僅連接 NVARCHAR(MAX)
字串。 N
前綴。 NVARCHAR(MAX)
初始化: 從頭開始將變數宣告為 NVARCHAR(MAX)
:<code class="language-sql">DECLARE @SQL NVARCHAR(MAX) = ''; SET @SQL = @SQL + N'Foo' + N'Bar';</code>
檢查截斷的字串
要完全查看可能被截斷的字串:
<code class="language-sql">DECLARE @SQL NVARCHAR(MAX) = ''; SET @SQL = @SQL + N'Foo' + N'Bar';</code>
這種方法有效地繞過了顯示目的的長度限制。
以上是SQL NVARCHAR 和 VARCHAR 的限制和截斷行為是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!