Sdílet prostřednictvím


nchar a nvarchar (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPlatform Platform System (PDW)databáze SQL v Microsoft Fabric

Datové typy znaků, které mají pevnou velikost, ncharnebo proměnlivou velikost, nvarchar. V SQL Serveru 2012 (11.x) a novějších verzích se používá kolace doplňkových znaků (SC), tyto datové typy ukládají úplný rozsah unicode znaková data a používají kódování znaků UTF-16. Pokud je zadána kolace jiného typu než SC, ukládají tyto datové typy pouze podmnožinu znakových dat podporovaných UCS-2 kódování znaků.

Argumenty

nchar [ ( n ) ]

Řetězcová data s pevnou velikostí n definuje velikost řetězce v bajtových párech a musí být hodnotou od 1 do 4 000. Velikost úložiště je dvakrát n bajtů. Pro kódování UCS-2 je velikost úložiště dvakrát n bajtů a počet znaků, které lze uložit, je také n. U kódování UTF-16 je velikost úložiště stále dvakrát n bajtů, ale počet znaků, které lze uložit, může být menší než n, protože doplňkové znaky používají dva bajtové páry (označované také jako náhradní dvojice). Synonyma ISO pro nchar jsou národní znakové a národní znak.

nvarchar [ ( n | max ) ]

Řetězcová data s proměnnou velikostí Hodnota n definuje velikost řetězce v bajtových párech a může být od 1 do 4 000. maximální označuje, že maximální velikost úložiště je 2^31-1 znaků (2 GB). Velikost úložiště je dvakrát n bajtů + 2 bajty. Pro kódování UCS- 2 je velikost úložiště dvakrát n bajty + 2 bajty a počet znaků, které lze uložit, je také n. U kódování UTF-16 je velikost úložiště stále dvakrát n bajty + 2 bajty. Počet znaků, které lze uložit, však může být menší než n, protože doplňkové znaky používají dva bajtové páry (označované také jako náhradní dvojice). Synonyma ISO pro nvarchar jsou národní znak se liší a národní znak se liší.

Poznámky

Běžným omylem je myslet na to, že při nchar(n) a nvarchar(n), n definuje počet znaků. V nchar(n) a nvarchar(n), n definuje délku řetězce v pár ech bajtů (0–4 000). n nikdy nedefinuje počet znaků, které lze uložit. Tento koncept je podobný definici char a varchar.

K chybě dochází, protože při použití znaků definovaných v rozsahu Unicode 0 až 65 535 může být jeden znak uložen pro každou dvojici bajtů. Ve vyšších rozsazích Unicode (65 536 až 1 114 111) ale může jeden znak používat dva bajtové páry. Například ve sloupci definovaném jako nchar(10)může databázový stroj uložit 10 znaků, které používají jednu dvojici bajtů (rozsah Unicode 0 až 65 535), ale méně než 10 znaků při použití dvou párů bajtů (rozsah Unicode 65 536 až 1 114 111). Další informace o úložišti a rozsazích znaků Unicode najdete v tématu Rozdíly úložiště mezi UTF-8 a UTF-16.

Pokud n není zadán v definici dat nebo příkazu deklarace proměnné, výchozí délka je 1. Pokud n není zadána pomocí funkce CAST, výchozí délka je 30.

Pokud používáte nchar nebo nvarchar, doporučujeme:

  • Použijte nchar, pokud jsou velikosti položek dat sloupce konzistentní.
  • Použití nvarchar, pokud se velikosti datových položek sloupce výrazně liší.
  • Použijte nvarchar(max), když se velikosti položek dat sloupce výrazně liší a délka řetězce může překročit 4 000 párů bajtů.

sysname je systémový datový typ definovaný uživatelem, který je funkčně ekvivalentní nvarchar(128), s tím rozdílem, že není nullable. sysname slouží k odkazu na názvy databázových objektů.

Objekty používající nchar nebo nvarchar jsou přiřazeny výchozí kolaci databáze, pokud není přiřazena konkrétní kolace pomocí klauzule COLLATE.

SET ANSI_PADDING je vždy ON pro nchar a nvarchar. SET ANSI_PADDING OFF se nevztahuje na datové typy nchar nebo nvarchar.

Předpona konstanty řetězce znaků Unicode písmenem N signalizovat vstup UCS-2 nebo UTF-16 v závislosti na tom, jestli se používá kolace SC, nebo ne. Bez předpony N se řetězec převede na výchozí znakovou stránku databáze, která nemusí rozpoznat určité znaky. Při použití kolace UTF-8 v SYSTÉMU SQL Server 2019 (15.x) a novějších verzích je výchozí znaková stránka schopná uložit znakovou sadu UTF-8 unicode.

Pokud předponu řetězcové konstanty s písmenem N, implicitní převod vede k řetězci UCS-2 nebo UTF-16, pokud konstanta, která se má převést, nepřekračuje maximální délku pro nvarchar řetězcový datový typ (4 000). V opačném případě má implicitní převod za následek velký nvarchar(max).

Varování

Každý varchar(max) nebo nvarchar(max) sloupec vyžaduje 24 bajtů dodatečného pevného přidělení, které se při operaci řazení počítá s limitem řádku 8 060 bajtů. Tyto další bajty mohou vytvořit implicitní limit počtu nenulových varchar(max) nebo nvarchar(max) sloupců v tabulce. Při vytvoření tabulky (nad rámec obvyklého upozornění, že maximální velikost řádku překračuje povolenou maximální velikost 8 060 bajtů) nebo v okamžiku vložení dat není k dispozici žádná zvláštní chyba. Tato velká velikost řádku může způsobit chyby (například chyba 512), které uživatelé nemusí očekávat během některých normálních operací. Dva příklady operací jsou aktualizace clusterovaného indexového klíče nebo řazení celé sady sloupců.

Převod dat znaků

Informace o převodu znakových dat naleznete v tématu znak a varchar. Další informace o převodu mezi datovými typy naleznete v tématu CAST a CONVERT.