Maison >base de données >tutoriel mysql >Quels sont les limites et les comportements de troncature de SQL NVARCHAR et VARCHAR, et comment puis-je résoudre les problèmes de troncature dans les requêtes SQL dynamiques ?
Comprendre les limitations et la troncature de SQL NVARCHAR et VARCHAR
Les requêtes SQL dynamiques rencontrent souvent des limitations inattendues de longueur de chaîne. Alors que NVARCHAR(MAX)
contient théoriquement plus de 2 Go de données, des limitations pratiques existent, notamment avec la concaténation. Cet article clarifie ces limites et propose des solutions pour éviter la troncature.
Comportement de troncature en concaténation
Le résultat de la concaténation de chaînes dépend fortement des types de données impliqués :
varchar(n)
varchar(n)
: La troncature se produit à 8 000 caractères.nvarchar(n)
nvarchar(n)
: La troncature se produit à 4 000 caractères.varchar(n)
nvarchar(n)
: La troncature se produit à 4 000 caractères.[n]varchar(max)
[n]varchar(max)
: Aucune troncature (en dessous de la limite de 2 Go).varchar(max)
varchar(n)
: Aucune troncature (en dessous de la limite de 2 Go), ce qui donne varchar(max)
.varchar(max)
nvarchar(n)
: varchar(n)
est converti en nvarchar(n)
. La troncature en nvarchar(4000)
se produit si varchar(n)
dépasse 4 000 caractères.nvarchar(max)
varchar(n)
: varchar(n)
est converti en nvarchar(n)
. Aucune troncature (en dessous de la limite de 2 Go).Types de données des littéraux de chaîne
N'string'
(avec le préfixe N
) : Traité comme nvarchar(n)
, où n
est la longueur de la chaîne.'string'
(sans le préfixe N
) :varchar(n)
si longueur ≤ 8 000 caractères.varchar(max)
si longueur > 8 000 caractères.Empêcher la troncature
Pour éviter les problèmes de troncature :
NVARCHAR(MAX)
de manière cohérente : Concaténez uniquement NVARCHAR(MAX)
chaînes.N
.NVARCHAR(MAX)
: Déclarer les variables comme NVARCHAR(MAX)
dès le début :<code class="language-sql">DECLARE @SQL NVARCHAR(MAX) = ''; SET @SQL = @SQL + N'Foo' + N'Bar';</code>
Inspection des chaînes tronquées
Pour afficher entièrement les chaînes potentiellement tronquées :
<code class="language-sql">DECLARE @SQL NVARCHAR(MAX) = ''; SET @SQL = @SQL + N'Foo' + N'Bar';</code>
Cette approche contourne efficacement les restrictions de longueur à des fins d'affichage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!