2013-08-29 11 views
16

ho visto questa domanda qualche parte -La 'N' nella clausola in cui di SQL

SELECT * 
FROM HR.Employees 
WHERE country <> N'JAP'; 

Che cosa "N" significa? Non sono sicuro se questo è valido solo per il server SQL.

risposta

32

La N sta per "Carattere nazionale" e significa che il contenuto della stringa è Unicode.

Si dovrebbe utilizzare Unicode (nchar/nvarchar) ogni qualvolta si verifichino nomi propri o altre entità che possono contenere caratteri al di fuori del set di caratteri ASCII predefinito. Se non si circondano tali stringhe con il prefisso N, si perderanno i dati. Per esempio:

SELECT N'ук ферт хер', 'ук ферт хер'; 

Risultati:

-----------  ----------- 
ук ферт хер  ?? ???? ??? 

Si dovrebbe anche essere sicuri di utilizzare il prefisso N nelle altre WHERE o clausole contro n(var)char colonne. Se non si utilizza il prefisso N, si potrebbero riscontrare seri problemi di prestazioni a causa della conversione implicita.

+0

Posso ottenere qualche collegamento per maggiori informazioni su questo? Ho provato google, ma non ho ricevuto informazioni. Questo è il tipo di risultati di ricerca che ottengo - http://stackoverflow.com/questions/3895387/whats-the-sql-national-character-nchar-datatype-really-for – Steam

+1

+1 ho saputo che questo era Unicode per sempre e non si è mai preoccupato di capire cosa fosse la N. –

+1

@blasto [molte informazioni qui] (http://en.wikipedia.org/wiki/Unicode). –

2

Ulteriori informazioni tratte dal libro - http://www.amazon.com/Training-Kit-Exam-70-461-Microsoft/dp/0735666059

Se si scrive un'espressione che coinvolge operandi di tipo diverso, SQL Server dovrà applicare conversione implicita per allineare i tipi. A seconda delle circostanze, le conversioni implicite possono a volte danneggiare le prestazioni. È importante conoscere la forma corretta di letterali di tipi diversi e assicurarsi di utilizzare quelli giusti. Un classico esempio di utilizzo di tipi letterali errati è con stringhe di caratteri Unicode (tipi NVARCHAR e NCHAR).

La forma corretta per una stringa di caratteri Unicode letterale consiste nel prefissare il letterale con una maiuscola N e delimitare il valore letterale con virgolette singole; per esempio, N'literal '. Per un normale carattere stringa letterale, devi solo delimitare il letterale con virgolette singole; per esempio, 'letterale'. È una pessima abitudine molto tipica specificare un carattere letterale stringa normale quando la colonna filtrata è di tipo Unicode, come nell'esempio seguente.

SELECT empid, firstname, lastname 
FROM HR.Employees 
WHERE lastname = 'Davis'; 

Poiché la colonna e il valore letterale hanno tipi diversi, SQL Server converte implicitamente tipo proprio operando all'altro. In questo esempio, fortunatamente, SQL Server converte il tipo letterale nel tipo della colonna, quindi può ancora contare in modo efficiente sull'indicizzazione. Tuttavia, potrebbero esserci casi in cui la conversione implicita fa male alle prestazioni. È consigliabile utilizzare la forma corretta, come nel seguito.

SELECT empid, firstname, lastname 
FROM HR.Employees 
WHERE lastname = N'Davis'; 
Problemi correlati