2010-02-22 8 views
8

Książka Czytam mówi, żeSQL Server Sortowanie

SQL Server obsługuje dwa rodzaje typów-Regular danych znakowych i Unicode. Typy danych regularnych to CHAR i VARCHAR, a typy danych Unicode obejmują NCHAR i NVARCHAR. Różnica polega na tym, że zwykłe znaki używają jednego bajtu pamięci dla każdego znaku, podczas gdy znaki Unicode wymagają dwóch bajtów na znak. Dzięki jednemu bajtowi pamięci na znak, wybór zwykłego znaku dla kolumny ogranicza Cię do tylko jednego języka oprócz angielskiego, ponieważ tylko 256 (2^8) różnych znaków może być reprezentowanych przez jeden bajt.

Po tym dowiedziałem się, że jeśli użyję Varchar, będę mógł używać tylko jednego języka (np. Hindi, języka indyjskiego) i angielskiego.
ale kiedy uruchomić ten

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

To pokazuje mi błąd „Układanie«Indic_General_90_CI_AS_KS»jest obsługiwana tylko typów danych Unicode i nie mogą być stosowane do char, varchar typy danych lub tekstowych.”

Więc gdzie ja źle zrozumiałem autora?
Dzięki

Odpowiedz

3

można znaleźć listę sortowania here, wraz z typem kodowania


Niektóre sortowania będą miały zastosowanie tylko do kodowania 1-bajtowych - 127 bity są wykorzystywane do normalnej i ASCII 128 są dostępne dla innych znaków - hindi prawdopodobnie nie mieści się w 128 znaków, więc 1-bajtowe zestawienie nie ma do niego zastosowania.

Będziesz musiał użyć nvarchar (lub innego typu znaku "n" z prefiksem).

- edycja -

French_CI_AS jako nieanglojęzycznych przykład

Jedną z rzeczy sortowania umożliwi to specyficzny język i ustawienia regionalne kolejność znaków. Dlatego francuski! = Łaciński.

Innym przykładem Arabic_CI_AS

To kodowanie 1 bajt z arabska alfabetu.

+0

Czy mógłbyś nazwać dowolne sortowanie 1-bajtowe, aby móc je przetestować? –

+0

SQL_Latin1_General_CP1_CI_AS –

+0

Chciałem dowiedzieć się czegoś innego niż angielski faktycznie –

1

można użyć tej

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

wykorzystuje to w instrukcji SQL, biorąc pod uwagę „treść” jest zmienna zawierająca arabski ciąg chcesz wstawić:

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

To działa dobrze.