Różnice między typami danych char, nchar, varchar i nvarchar w SQL Server

By: Sherlee Dizon | Updated: 2016-06-14 | Komentarze (4) | Powiązane: 1 | 2 | 3 | Więcej > Typy danych

Problem

Różnice pomiędzy typami danych SQL Server char, nchar, varchar i nvarchar są często dyskutowane nie tylko podczas rozmów kwalifikacyjnych, ale także przez programistów podczas dyskusji na temat projektowania baz danych. W tym poradniku chciałbym podzielić się nie tylko podstawowymi różnicami, ale również tym, co powinniśmy wiedzieć i na co zwracać uwagę podczas używania każdego z typów danych.

Rozwiązanie

Char, nchar, varchar i nvarchar są używane do przechowywania danych tekstowych lub łańcuchowych w bazach danych serweraSQL.

  • char – jest synonimem SQL-92 dla znaku. Dane uzupełniane są spacjami, aby wypełnić rozmiar pola. Typ danych o stałej długości.
  • nchar – synonim znaków narodowych w SQL-92. Typ danych o stałej długości.
  • varchar – synonim SQL-92 dla znaków zmiennych. Typ danych o zmiennej długości.
  • nvarchar – synonim w języku SQL-92 dla znaków narodowych varying i nationalcharacter varying. Typ danych o zmiennej długości.

Co oznacza N w SQL Server

Możesz się zastanawiać co oznacza N? N oznaczaNational Language Character Set i jest używane do określenia łańcucha znaków Unicode. W przypadku używania typów danych Unicode kolumna może przechowywać dowolny znak zdefiniowany przez standard Unicode, który obejmuje wszystkie znaki zdefiniowane w różnych zestawach znaków. Należy zauważyć, że typy danych Unicode zajmują dwa razy więcej miejsca niż typy danych niebędące typami Unicode.

Unicode jest zwykle używany w aplikacjach baz danych, które zostały zaprojektowane w celu ułatwienia obsługi stron kodowych wykraczających poza strony kodowe języka angielskiego i Europy Zachodniej. Oznacza to, że typy danych znaków Unicode są ograniczone do połowy przestrzeni, ponieważ każdy bajt zajmuje dwa bajty, aby zapisać dane (Unicode jest czasami określany jako „double-wide”). SQL Server obsługuje Unicode od wersji 7.0 poprzez udostępnienie typów danych nchar/nvarchar/ntext. SQL Server nie wspiera kodowaniaUTF-8 dla danych Unicode, ale wspiera kodowanieUTF-16.

Poniżej przedstawiłem tabelę, która posłuży jako pomoc w szybkim zorientowaniu się w temacie.

Różnice między char, nchar, varchar i nvarchar w SQL Server

char nchar varchar nvarchar
Typ danych znaku Non-Unicode fixed-length Unicode fixed-length może przechowywać zarówno znaki nie-Unicode jak i Unicode (tj. Non-Unicode variable length Unicode variable length can store both non-Unicode and Unicode characters (i.e. Japanese, Korean etc.) Non-Unicode variable length Unicode variable length can store both non-Unicode and Unicode characters (i.e. Japanese, Korean etc.)
Maksymalna długość do 8 000 znaków do 4 000 znaków do 8 000 znaków do 4,000 znaków
Rozmiar znaków zajmuje 1 bajt na znak zajmuje 2 bajty na znak Unicode/Non-Unicode zajmuje 1 bajt na znak zajmuje 2 bajty na znak Unicode/Non-Unicode
Storage Size n bytes 2 razy n bytes Actual Length (in bytes) 2 razy Actual Length (in bytes)
Usage stosować, gdy długość danych jest stała lub kolumny o stałej długości stosować tylko wtedy, gdy potrzebna jest obsługa Unicode, np. japońskich znaków Kanji lub koreańskich znaków Hangul, ze względu na koszty przechowywania stosować, gdy długość danych jest zmienna lub kolumny o zmiennej długości i jeśli rzeczywista dane są zawsze dużo mniejsze niż pojemność używaj tylko wtedy, gdy potrzebujesz obsługi Unicode, takiej jak japońskie znaki Kanji lub KoreanHangul, ze względu na koszty przechowywania
query that uses a parametr varchar wykonuje wyszukiwanie indeksu ze względu na zestawy kolumn kwerenda, która używa parametru nvarchar wykonuje skanowanie indeksu ze względu na zestawy kolumn

Wady i zalety char, nchar, varchar i nvarchar w SQLServer

Typy danych Zalety Wady
char Wydajność zapytania jest lepsza, ponieważ nie ma potrzeby przesuwania kolumny podczas aktualizacji.
Nie ma potrzeby przechowywania długości łańcucha w dwóch ostatnich bajtach.
Jeżeli nie jest poprawnie używany, może zająć więcej miejsca niż varchar, ponieważ ma stałą długość i nie znamy długości łańcucha, który ma być przechowywany. Nie jest dobry do kompresji, ponieważ umieszcza znaki spacji na końcu.
varchar Ponieważ jest zmiennej długości, zajmuje mniej miejsca w pamięci. Zmniejsza wydajność niektórych zapytań SQL.
nchar/nvarchar Obsługuje wiele komputerów klienckich, które działają w różnych lokalizacjach. Jeżeli nie jest właściwie używany, może zużywać dużo dodatkowej przestrzeni dyskowej.

Wraz z rozwojem i innowacyjnością aplikacji internetowych, jeszcze ważniejsza jest obsługa komputerów klienckich, które działają w różnych lokalizacjach. Najprostszym sposobem zarządzania danymi znakowymi w międzynarodowych bazach danych jest używanie typów danych Unicodenchar, nvarchar i ntext, zamiast ich odpowiedników nie-Unicode, char, varchar i text.

Unicode jest standardem mapowania punktów kodowych na znaki. Ponieważ został on zaprojektowany tak, aby objąć wszystkie znaki wszystkich języków świata, nie ma potrzeby tworzenia różnych stron kodowych do obsługi różnych zestawów znaków. SQL Server wspiera standard Unicode w wersji 3.2. Jeśli wszystkie aplikacje pracujące z międzynarodowymi bazami danych używają również zmiennych Unicode zamiast zmiennych non-Unicode, nie trzeba wykonywać translacji znaków w żadnym miejscu w systemie. Klienci będą widzieli te same znaki w danych, co wszyscy inni klienci.

SerwerSQL przechowuje wszystkie tekstowe dane katalogowe systemu w kolumnach o typach danych Unicode. Nazwy obiektów bazodanowych takich jak tabele, widoki, procedury składowane przechowywane są w kolumnach Unicode. Umożliwia to tworzenie aplikacji z wykorzystaniem wyłącznie Unicode oraz pozwala uniknąć problemów z konwersją stron kodowych.

Pamiętaj, aby podczas tworzenia nowych aplikacji rozważyć, czy będą one używane globalnie, ponieważ pomoże ci to określić, czy użyć nchar i nvarchar do obsługi różnych języków.

Kolejne kroki

Dowiedz się więcej czytając i zgłębiając następujące zagadnienia:

  • Poświęć czas na przeczytanie również tej wskazówki, która może pomóc Ci w planowaniu projektu bazy danychDefiniowanie typów danych i rozmiarów
  • Dowiedz się więcej o znaczeniu spójności typów danychSQL Server Data Type Consistency
  • Porównanie typów danych SQL Server i Oracle
  • Jeśli masz aplikację, którą planujesz uruchomić globalnie, spróbuj użyć globalnych znaków. Kto wie, jeśli ci się uda, może zwiększyć sprzedaż i wziąć swoje aplikacje do następnego poziomu.

Ostatnia aktualizacja: 2016-06-14

get scripts

następny przycisk wskazówki

O autorze
.

MSSQLTips autor Sherlee DizonSherlee Dizon jest konsultantem IT i twórcą aplikacji internetowych z ponad 14-letnim doświadczeniem jako programista i twórca stron internetowych.
Zobacz wszystkie moje porady

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *