2012-09-06 5 views
4

J'ai une question rapide que je ne trouve pas de réponse à n'importe où. J'ai souvent besoin de convertir un type de base de données à l'autre, donc j'écris un programme pour convertir les bases de données MS SQL Server en arrière. Le problème que je suis est que je ne peux pas déclarer une variable nvarchar avec une longueur maximale de plus de 4000. Je reçois,Confus au sujet de la limite nvarchar

"La taille (6000) donnée au paramètre" description "dépasse le maximum autorisé (4000). "

Pourtant, cela est clairement défini comme un nvarchar (6000) dans la base de données d'origine, au moins je le pense parce que max_length est 6000, si vous utilisez max max_length est -1, non? Je sais que je pourrais juste utiliser nvarchar (max) mais si j'écris un logiciel qui convertit des bases de données, je veux rester aussi fidèle à l'original que possible.

La limite maximale de nvarchar a-t-elle été modifiée récemment ou est-ce un paramètre que j'ai manqué?

+1

'max_length' est en octets, pas en caractères. 'nvarchar (6000)' n'est pas valide car la limite de * caractères * est 4000. –

+1

Vous pouvez avoir 1-4000, ou Max pour Nvarchar. Peut-être que ce que vous avez vu précédemment était la taille - comme Nvarchar stocke des données Unicode, il prend deux fois plus d'espace qu'un varchar normal - je suppose que ce que vous avez vu était un Nvarchar (3000) - la taille 6000. – Bridge

+0

Oh bien sûr, tu as raison. La longueur maximale est évidemment en octets, merci! – user1277327

Répondre

3

La taille donnée (6000) est en octets où comme lorsque vous donnez la longueur, il est en nombre de caractères d'unicode. La limite 4000 est parce que le stockage interne de nvarchar (xxxx) et nvarchar (max) est différent. Si vous voulez plus de stockage que 4000 char, utilisez nvarchar (max).