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
O autorze
Zobacz wszystkie moje porady