Obecnie korzystamy z naszej bazy danych SQL Server 2012 varchar
i chcielibyśmy to zmienić nvarchar
. Wygenerowałem skrypt, aby to zrobić.
Moje pytanie: czy są jakieś różnice w sposobie zapisywania danych w varchar
kolumnach przez SQL Server nvarchar
? Mamy wiele procedur zaplecza, o które się martwię.
Edycja:
Nie jestem pewien, czy to pomaga, ale kolumny nie mają indeksów, f / k ani ograniczeń.
sql-server
varchar
Chris L.
źródło
źródło
Odpowiedzi:
Musisz mieć pewność, że poprzedzisz literały ciągowe Unicode prefiksem N. Na przykład będą działać inaczej, jeśli typem danych bazowych jest
NVARCHAR
:Wyniki:
W przypadku urządzeń przenośnych lub niszczejących przeglądarek, które zamiast rzeczywistych znaków Unicode wyświetlają znaki pola, wygląda to tak:
źródło
Największym problemem jest to, że
nvarchar
używa 2 bajtów na znak, podczas gdyvarchar
używa 1. W ten sposóbnvarchar(4000)
zużywa tyle samo miejsca do przechowywania covarchar(8000)
*.Oprócz wszystkich danych postaci wymagających dwukrotnie więcej miejsca do przechowywania, oznacza to również:
nvarchar
kolumn, aby utrzymać wiersze w granicach 8060 bajtów / 8000 bajtów.nvarchar(max)
kolumn, zostaną one wypchnięte poza wiersz wcześniej niżvarchar(max)
byłoby to możliwe.nvarchar
kolumn, aby pozostać w granicach 900-bajtowego limitu klucza indeksu (nie wiem, dlaczego chcesz używać tak dużego klucza indeksu, ale nigdy nie wiesz).Poza tym praca z
nvarchar
niczym nie różni się, zakładając, że oprogramowanie klienckie jest przystosowane do obsługi Unicode. SQL Server będzie przejrzysty upconvertvarchar
sięnvarchar
, dzięki czemu nie trzeba ściśle prefiks N dla napisowych chyba że używasz 2-bajtowy (tj Unicode), w dosłownym. Pamiętaj, że rzutowanienvarchar
na wynikivarbinary
daje inne wyniki niż robienie tego samego zvarchar
. Ważną rzeczą jest to, że nie będziesz musiał natychmiast zmieniać każdego literału varchar na literał nvarchar, aby aplikacja działała, co ułatwia proces.* Jeśli używasz kompresji danych (wystarczy lekka kompresja wierszy, wymagana wersja Enterprise Edition przed SQL Server 2016 SP1 ), zwykle znajdziesz
nchar
invarchar
nie zajmie więcej miejsca niżchar
ivarchar
, z powodu kompresji Unicode (przy użyciu algorytmu SCSU) .źródło
Pomyśl, że następujące są główne różnice:
źródło
nvarchar był wymagany do replikacji scalania RDP z mobilnej bazy danych do SQL Server 2005. Również LTrim (), RTrim () i Trim () były często używane .
Nie wiem, czy to się zmieniło w ostatnich latach, czy nie, ale nvarchar jest teraz standardem używanym do logowania do witryny .NET Simple Membership w VS Pro 2017, używanej w wygenerowanej bazie danych.
źródło
Jeśli korzystasz z NVarchar zamiast Varchar i nie masz obowiązku obsługi MULTI-LINQUAL, zwiększysz pamięć dla DB, Kopie zapasowe (lokalne i zewnętrzne). Nowoczesne bazy danych powinny obsługiwać oba, a wszelkie trafienia konwersji powinny być uwzględnione w projekcie.
źródło