2010-02-22 15 views
8

Il libro che sto leggendo dice cheSql Server fascicolazione

SQL Server supporta due tipi di tipi-regolare di dati carattere e Unicode. I tipi di dati regolari includono CHAR e VARCHAR e i tipi di dati Unicode includono NCHAR e NVARCHAR. La differenza è che i caratteri regolari usano un byte di spazio per ogni carattere, mentre i caratteri Unicode richiedono due byte per carattere. Con un byte di memoria per carattere, una scelta di un tipo di carattere regolare per una colonna limita l'utente a una sola lingua oltre all'inglese, poiché solo 256 (2^8) caratteri diversi possono essere rappresentati da un singolo byte.

Quello che ho imparato da questo è che, se uso Varchar, posso usare solo una lingua (per esempio Hindi, una lingua indiana) insieme all'inglese.
ma quando ho eseguito questo

Create Table NameTable 
(
    NameColumn varchar(MAX) COLLATE Indic_General_90_CI_AS_KS 
) 

E mi mostra l'errore "regole di confronto '' Indic_General_90_CI_AS_KS è supportata solo sui tipi di dati Unicode e non possono essere applicati a char, i tipi di dati varchar o testo."

Quindi, dove ho frainteso l'autore?
Grazie

risposta

3

È possibile trovare un elenco di regole di confronto here, insieme con il tipo di codifica


Alcuni collations si applicheranno solo alle codifiche 1 byte - 127 bit vengono utilizzati per ASCII normale e 128 sono disponibili per altri caratteri - l'hindi probabilmente non si adatta a 128 caratteri, quindi una collazione da 1 byte non si applica ad essa.

Sarà necessario utilizzare un nvarchar (o un altro tipo di carattere prefissato "n").

- modifica -

French_CI_AS come un esempio di non-inglese

Una delle cose collations consentono è la lingua e le impostazioni internazionali ordinamento specifico di caratteri. Quindi francese! = Latino.

altro esempio Arabic_CI_AS

Questa è una codifica 1 byte con l'alfabeto arabo.

+0

È possibile denominare qualsiasi confronto di 1 byte in modo che sia possibile verificarlo? –

+0

SQL_Latin1_General_CP1_CI_AS –

+0

Volevo sapere qualcosa di diverso dall'inglese in realtà –

1

è possibile utilizzare questo

name = N'مرحبا كيف حالك' 
3

Utilizzare questo nell'istruzione SQL, prendendo in considerazione "contenuto" è una variabile che contiene la stringa araba che si desidera inserire:

update Table set contents = convert(text, N'" + content + "' collate Arabic_CI_AS) 

Funziona benissimo.