Udostępnij za pośrednictwem


nchar i nvarchar (Transact-SQL)

Dotyczy:sql ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w usłudze Microsoft Fabric

Typy danych znaków, które są o stałym rozmiarze, ncharlub zmienny rozmiar, nvarchar. W programie SQL Server 2012 (11.x) i nowszych wersjach używane jest sortowanie z włączonym znakami dodatkowymi (SC), te typy danych przechowują pełny zakres danych znaków Unicode i używają kodowania znaków UTF-16. Jeśli określono sortowanie inne niż SC, te typy danych przechowują tylko podzestaw danych znaków obsługiwanych przez kodowanie znaków UCS-2.

Argumenty

nchar [ ( n ) ]

Dane ciągów o stałym rozmiarze. n definiuje rozmiar ciągu w parach bajtowych i musi być wartością z zakresu od 1 do 4000. Rozmiar magazynu to dwa razy n bajtów. W przypadku kodowania UCS-2 rozmiar magazynu jest dwa razy n bajtów, a liczba znaków, które można przechowywać, jest również n. W przypadku kodowania UTF-16 rozmiar magazynu jest nadal dwa razy n bajtów, ale liczba znaków, które mogą być przechowywane, może być mniejsza niż n, ponieważ znaki dodatkowe używają dwóch par bajtów (nazywanych również parami zastępczymi ). Synonimy ISO dla ncharkrajowych char i charakter narodowy.

nvarchar [ ( n | max ) ]

Dane ciągów o zmiennym rozmiarze. Wartość n definiuje rozmiar ciągu w parach bajtowych i może wynosić od 1 do 4000. maksymalna wskazuje, że maksymalny rozmiar magazynu wynosi 2^31–1 znaków (2 GB). Rozmiar magazynu to dwa razy n bajtów + 2 bajty. W przypadku kodowania UCS-2 rozmiar magazynu jest dwa razy n bajtów + 2 bajty, a liczba znaków, które można przechowywać, jest również n. W przypadku kodowania UTF-16 rozmiar magazynu jest nadal dwa razy n bajtów + 2 bajty. Jednak liczba znaków, które mogą być przechowywane, może być mniejsza niż n, ponieważ znaki dodatkowe używają dwóch par bajtów (nazywanych również parami zastępczymi ). Synonimy ISO dla nvarcharkrajowych znaków różniące się i charakter krajowy różniące się.

Uwagi

Typowym błędem jest myślenie, że w przypadku nchar(n) i nvarchar(n), n definiuje liczbę znaków. Jednak w nchar(n) i nvarchar(n)), n definiuje długość ciągu w par bajtowych (0–4 000). n nigdy nie definiuje liczby znaków, które mogą być przechowywane. Ta koncepcja jest podobna do definicji char i varchar.

Błędne przekonanie występuje, ponieważ w przypadku używania znaków zdefiniowanych w zakresie Unicode od 0 do 65 535 można przechowywać jeden znak dla każdej pary bajtów. Jednak w wyższych zakresach Unicode (od 65 536 do 114 114 111) jeden znak może używać dwóch par bajtów. Na przykład w kolumnie zdefiniowanej jako nchar(10)aparat bazy danych może przechowywać 10 znaków, które używają jednej pary bajtów (zakres Unicode od 0 do 65 535), ale mniej niż 10 znaków w przypadku używania dwóch par bajtów (zakres Unicode od 65 536 do 114 1111). Aby uzyskać więcej informacji na temat magazynu i zakresów znaków Unicode, zobacz Różnice magazynu między utF-8 i UTF-16.

Jeśli n nie jest określona w instrukcji definicji danych lub deklaracji zmiennej, domyślna długość to 1. Jeśli n nie jest określona z funkcją CAST, domyślna długość to 30.

Jeśli używasz nchar lub nvarchar, zalecamy:

  • Użyj nchar, gdy rozmiary wpisów danych kolumny są spójne.
  • Użyj nvarchar, gdy rozmiary wpisów danych kolumny różnią się znacznie.
  • Użyj nvarchar(max), gdy rozmiary wpisów danych kolumny różnią się znacznie, a długość ciągu może przekraczać 4000 par bajtów.

nazwa_systemu jest zdefiniowanym przez system typem danych, który jest funkcjonalnie równoważny nvarchar(128), z tą różnicą, że nie jest dopuszczana wartość null. nazwa_systemu służy do odwołowania się do nazw obiektów bazy danych.

Obiekty używające nchar lub nvarchar są przypisywane domyślne sortowanie bazy danych, chyba że zostanie przypisane określone sortowanie przy użyciu klauzuli COLLATE.

jest zawsze dla nvarchar. SET ANSI_PADDING OFF nie ma zastosowania do nchar lub nvarchar typów danych.

Prefiks ciąg znaków Unicode stałe z literą N do sygnału danych wejściowych UCS-2 lub UTF-16, w zależności od tego, czy sortowanie SC jest używane, czy nie. Bez prefiksu N ciąg jest konwertowany na domyślną stronę kodową bazy danych, która może nie rozpoznawać niektórych znaków. W programie SQL Server 2019 (15.x) i nowszych wersjach, gdy jest używane sortowanie z włączoną obsługą protokołu UTF-8, domyślna strona kodowa może przechowywać zestaw znaków Unicode UTF-8.

W przypadku prefiksu stałej ciągu z literą Nniejawna konwersja powoduje, że ciąg UCS-2 lub UTF-16, jeśli stała do konwersji nie przekracza maksymalnej długości dla nvarchar typu danych ciągu (4000). W przeciwnym razie niejawna konwersja powoduje, że nvarchar(max).

Ostrzeżenie

Każda varchar(max) lub nvarchar(max) kolumny wymaga 24 bajtów dodatkowej stałej alokacji, która jest liczone względem limitu wierszy 8060 bajtów podczas operacji sortowania. Te dodatkowe bajty mogą utworzyć niejawny limit liczby kolumn varchar(max) lub nvarchar(max) kolumn w tabeli. Nie podano żadnego specjalnego błędu podczas tworzenia tabeli (poza zwykłym ostrzeżeniem, że maksymalny rozmiar wiersza przekracza dozwoloną maksymalną liczbę 8060 bajtów) lub w momencie wstawiania danych. Ten duży rozmiar wiersza może powodować błędy (takie jak błąd 512), które użytkownicy mogą nie przewidzieć podczas niektórych normalnych operacji. Dwa przykłady operacji to klastrowana aktualizacja klucza indeksu lub rodzaj pełnego zestawu kolumn.

Konwertowanie danych znaków

Aby uzyskać informacje na temat konwertowania danych znaków, zobacz char i varchar. Aby uzyskać więcej informacji na temat konwertowania między typami danych, zobacz CAST i CONVERT.