2010-02-22 62 views
8

Cuốn sách tôi đang đọc nói rằngSql Server Collation

SQL Server hỗ trợ hai loại định dạng thường xuyên dữ liệu nhân vật và Unicode. Các kiểu dữ liệu thông thường bao gồm CHAR và VARCHAR, và các kiểu dữ liệu Unicode bao gồm NCHAR và NVARCHAR. Sự khác biệt là các ký tự thông thường sử dụng một byte dung lượng lưu trữ cho mỗi ký tự, trong khi các ký tự Unicode yêu cầu hai byte cho mỗi ký tự. Với một byte lưu trữ cho mỗi ký tự, lựa chọn một kiểu ký tự thông thường cho một cột sẽ giới hạn bạn chỉ một ngôn ngữ ngoài tiếng Anh bởi vì chỉ 256 ký tự khác nhau (2^8) có thể được biểu diễn bằng một byte đơn.

Điều tôi biết là, nếu tôi sử dụng Varchar thì tôi chỉ có thể sử dụng một ngôn ngữ (Đối với tiếng Hindi, tiếng Ấn Độ) cùng với tiếng Anh.
Nhưng Khi tôi chạy này

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

Nó cho thấy tôi lỗi "Collation 'Indic_General_90_CI_AS_KS' được hỗ trợ trên chỉ Unicode kiểu dữ liệu và không thể được áp dụng cho char, varchar hoặc văn bản kiểu dữ liệu."

Vậy tôi đã hiểu sai tác giả ở đâu?
Cảm ơn

Trả lời

3

Bạn có thể tìm thấy một danh sách các collations here, cùng với các loại mã hóa


Một số collations sẽ chỉ áp dụng cho mã hóa 1 byte - 127 bit được sử dụng cho ASCII bình thường và 128 có sẵn cho các ký tự khác - tiếng Hin-ddi có thể không phù hợp với 128 ký tự sao cho một đối chiếu 1 byte không áp dụng cho nó.

Bạn sẽ phải sử dụng nvarchar (hoặc loại ký tự có tiền tố 'n' khác).

- chỉnh sửa -

French_CI_AS như một ví dụ không phải tiếng Anh

Một trong những điều collations phép là ngôn ngữ và Locale đặt hàng cụ thể của nhân vật. Vì vậy, tiếng Pháp! = Latin.

Ví dụ khác Arabic_CI_AS

Đây là mã hóa 1 byte với bảng chữ cái arabic.

+0

Bạn có thể đặt tên cho bất kỳ collation 1 byte nào để tôi có thể kiểm tra nó không? –

+0

SQL_Latin1_General_CP1_CI_AS –

+0

Tôi muốn biết bất kỳ điều gì khác ngoài tiếng Anh thực tế –

1

bạn có thể sử dụng

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

này sử dụng này trong Bản Tuyên Bố SQL của bạn, xem xét "nội dung" là một biến chứa chuỗi rập bạn muốn chèn:

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

Nó hoạt động tốt.

Các vấn đề liên quan