Widziałem przedrostek N w niektórych zapytaniach wstawiających T-SQL. Wiele osób używało N
przed wstawieniem wartości do tabeli.
Szukałem, ale nie byłem w stanie zrozumieć, jaki jest cel włączenia N
przed wstawieniem ciągów do tabeli.
INSERT INTO Personnel.Employees
VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1),
W jakim celu służy ten prefiks „N” i kiedy należy go używać?
źródło
N
tylko wtedy, gdy używam następujących typów danychCHAR, VARCHAR or TEXT
? ponieważ `NCHAR, NVARCHAR lub NTEXT` z natury przechowują kod UNICODE, nie muszę go dodawać osobno ... czy to prawda?databases aspfaq com
przekierowuje do bardzo wątpliwych witryn (fkref com
,za1 zeroredirect1 com
,i0z13 trackvoluum com
), które zostały oznaczone przez naszą korporacyjną zaporę jak pornografia, złośliwych witryn i adresów URL spamu. Skontaktowałem się z właścicielem aspfaq.com i zredagowałem odpowiedź, aby usunąć link.Pozwól, że powiem ci irytującą rzecz, która wydarzyła się z
N'
przedrostkiem - nie byłem w stanie tego naprawić przez dwa dni.Moje zestawienie bazy danych to SQL_Latin1_General_CP1_CI_AS .
Ma tabelę z kolumną o nazwie MyCol1 . To jest Nvarchar
To zapytanie nie odpowiada dokładnej wartości, która istnieje.
użycie przedrostka N '' naprawia to
Dlaczego? Ponieważ latin1_general nie ma dużych kropek, to chyba dlatego się nie udaje.
źródło
1. Wydajność:
Załóżmy, że klauzula where jest taka:
Jeśli kolumna NAME jest innego typu niż nvarchar lub nchar, nie należy określać prefiksu N. Jeśli jednak kolumna NAME jest typu nvarchar lub nchar, to jeśli nie określisz prefiksu N, wówczas „JON” jest traktowany jako inny niż Unicode. Oznacza to, że typ danych kolumny NAME i łańcucha „JON” są różne, a zatem SQL Server domyślnie konwertuje typ jednego operandu na drugi. Jeśli SQL Server konwertuje typ literału na typ kolumny, nie ma problemu, ale jeśli zrobi to w drugą stronę, wydajność spadnie, ponieważ indeks kolumny (jeśli jest dostępny) nie będzie używany.
2. Zestaw znaków:
Jeśli kolumna jest typu nvarchar lub nchar, zawsze używaj przedrostka N, określając ciąg znaków w klauzuli WHERE kryteria / UPDATE / INSERT. Jeśli tego nie zrobisz, a jeden ze znaków w łańcuchu będzie Unicode (np. Znaki międzynarodowe - przykład - ā), to nie powiedzie się lub nastąpi uszkodzenie danych.
źródło
Zakładając, że wartością jest typ nvarchar, ponieważ tylko my używamy N ''
źródło