Si dovrebbe usare NVARCHAR ogni volta che si hanno a memorizzare più le lingue. Credo che tu debba usarlo per le lingue asiatiche ma non citarlo su di esso.
Ecco il problema se si prende il russo ad esempio e lo si memorizza in un varchar, si andrà bene fintanto che si definisce la tabella codici corretta. Ma supponiamo che tu stia utilizzando un'installazione sql inglese predefinita, quindi i caratteri russi non verranno gestiti correttamente. Se si stesse utilizzando NVARCHAR(), sarebbero gestiti correttamente.
Modifica
Ok vorrei citare MSDN e probabilmente qualche camera ero a specifici ma non voglio per memorizzare la pagina più di un codice in una colonna varcar, mentre è possibile che non dovrebbe
quando avete a che fare con dati di testo che viene immagazzinate nella char, varchar, varchar (max), o il tipo di dati di testo, il più importante limitazione considerare è che solo le informazioni da una singola pagina di codice possono essere convalidate dal loSistema. (È possibile memorizzare i dati da più code page, ma questo non è consigliato.) La tabella codici esatta utilizzata per convalidare e archiviare i dati dipende da sulle regole di confronto della colonna. Se le regole di confronto a livello di colonna non sono state definite , vengono utilizzate le regole di confronto del database . Per determinare il codice della pagina che viene utilizzato per una determinata colonna, è possibile utilizzare la funzione COLLATIONPROPERTY , come mostrato nelle seguenti esempi di codice:
Ecco qualche altro:
Questo esempio illustra il fatto che molte località, come il georgiano e l'hindi , non dispongono di pagine di codice, poiché sono le regole di confronto solo Unicode.Quei regole di confronto non sono appropriati per colonne che utilizzano il char, varchar, o il tipo di dati testo
Così georgiano o Hindi davvero bisogno di essere conservati come nvarchar. L'arabo è anche un problema:
Un altro problema che potreste incontrare è l'incapacità di memorizzare i dati quando non tutti i caratteri che si desidera supporto sono contenute nel codice pagina. In molti casi, Windows considera una tabella codici specifica come una "miglior tabella adatta", che significa che c'è non è possibile garantire che sia possibile fare affidamento sulla tabella codici per gestire tutto il testo; è semplicemente il migliore disponibile. Un esempio di questo è l'alfabeto arabo: supporta una vasta gamma di lingue, tra cui Baluchi, Berbero, Farsi, Kashmiri, kazako, kirghisi, Pashto, Sindhi, Uighur, Urdu, e altro ancora. Tutti nelle lingue abbiamo ulteriori personaggi oltre a quelle nella lingua araba come definito nel codice di Windows pagina 1256. Se si tenta di memorizzare questi caratteri supplementari in una colonna non Unicode che ha la collazione araba , i personaggi sono convertiti in punti interrogativi.
Qualcosa da tenere a mente quando si utilizza Unicode anche se è possibile memorizzare lingue diverse in una singola colonna è possibile ordinare solo utilizzando una singola fascicolazione. Ci sono alcune lingue che usano caratteri latini ma non ordinano come le altre lingue latine. Gli accenti ne sono un buon esempio, non riesco a ricordare l'esempio, ma c'era una lingua dell'Europa orientale la cui Y non era simile all'inglese Y. Poi c'è il ch spagnolo che gli utenti spagnoli espongono per essere ordinati dopo h.
Tutto sommato con tutti i problemi che devi affrontare quando si tratta di internalizzazione. È mia opinione che sia più facile usare i caratteri Unicode fin dall'inizio, evitare le conversioni extra e prendere il colpo di spazio. Quindi la mia affermazione in precedenza.
>> quando ci sono lingue diverse nella stessa colonna ... Questo è tutto! –
Va notato che * "lingue diverse" * non significa semplicemente che righe diverse possono contenere valori di lingue diverse. Significa anche che le regole di confronto predefinite del database (ad esempio la locale della macchina server) sono diverse dalle impostazioni locali di qualsiasi computer client. per esempio. Il computer server è impostato su 'en-US', ma il mio PC è impostato su' fr-US'. –
@IanBoyd In generale, le regole di confronto saranno molto problematiche quando si mescolano le lingue in una colonna e si ritornano gli elementi in più lingue in un singolo set e si utilizzano le regole di confronto per l'ordine. Le regole di confronto possono anche avere un effetto sui caratteri combinati da trattare come uno (ungherese dz e ly): http://www.sqlservercentral.com/Forums/Topic19439-9-1.aspx http://stackoverflow.com/questions/7207590/sql-server-caso-fascicolazione-problema - nvarchar non risolverà questo –