2010-09-06 32 views
6

Tôi hơi bối rối về các collations mặc định khi tạo một cơ sở dữ liệu. Dữ liệu được lưu trữ trong cơ sở dữ liệu sẽ bằng các ngôn ngữ khác nhau. Người dùng chính của cơ sở dữ liệu sẽ sử dụng ngôn ngữ tiếng Tây Ban Nha, nhưng nó cũng sẽ được sử dụng trong tiếng Anh, tiếng Pháp ... Khi đối chiếu mặc định của Tây Ban Nha là Modern_Spanish_CI_AS, và tiếng Anh, tiếng Pháp .. mặc định là Latin1_General_CI_AS, tôi muốn được thông báo về việc sử dụng đối chiếu nào và nếu có một số hạn chế về việc sử dụng một đối chiếu hoặc đối chiếu khác.collation mặc định tốt nhất của một cơ sở dữ liệu đa ngôn ngữ

Rất cám ơn sự giúp đỡ của bạn Trân

Javier

+0

quên đề cập rằng hệ điều hành mà chúng tôi sử dụng là cửa sổ bằng tiếng Tây Ban Nha, trong trường hợp quyết định đối chiếu phụ thuộc vào ngôn ngữ hệ điều hành – javier

Trả lời

5

Một đối chiếu có hai tác dụng:

  1. Đối-phi Unicode kiểu dữ liệu nó quyết định trang mã của dữ liệu, tức là nó xác định các ký tự bạn có thể lưu trữ trong cột/biến hoặc không phải là
  2. Đối với tất cả các loại dữ liệu, nó ảnh hưởng đến cách sắp xếp và so sánh dữ liệu, tức là ORDER BY và equality

Để tránh vấn đề với vấn đề đầu tiên, luôn lưu trữ và thao tác dữ liệu Unicode bằng cách sử dụng kiểu dữ liệu nchar/nvarchar, bởi vì sau đó bạn không phải lo lắng về collation anyway. Nó đòi hỏi nhiều không gian đĩa hơn, nhưng nó tránh được một số vấn đề thực sự khó xử, vì vậy đối với hầu hết mọi người, nó có thể là một sự cân bằng tốt.

Đối với vấn đề thứ hai, hãy sử dụng collation có ý nghĩa nhất cho cơ sở dữ liệu của bạn, tức là collation sắp xếp và so sánh dữ liệu theo cách bạn muốn thực hiện hầu hết thời gian? Ví dụ: nếu bạn biết rằng các so sánh phân biệt chữ hoa chữ thường sẽ quan trọng thì Latin1_General_CS_AS có thể là lựa chọn tốt hơn.

Và bạn luôn có thể sử dụng đối chiếu để xác định đối chiếu một cách rõ ràng nếu bạn cần kiểm soát tốt hơn các truy vấn cụ thể:

create table #t (name nvarchar(100)) 

insert into #t select N'Che' 
insert into #t select N'Carlos' 
insert into #t select N'Cruz' 

select name from #t order by name collate Modern_Spanish_CI_AS 
select name from #t order by name collate Traditional_Spanish_CI_AS 

drop table #t 

Nếu bạn không biết làm thế nào dữ liệu văn bản sẽ được sắp xếp hoặc so sánh và nếu người dùng của bạn don Không biết, hoặc, sau đó tôi sẽ chỉ ở lại với collation mặc định của bạn (và sử dụng Unicode!); trong trường hợp xấu nhất, bạn luôn có thể di chuyển dữ liệu đến một bảng mới với collation chính xác. Và có rất nhiều tài liệu về collations trong sách trực tuyến mà bạn nên có một cái nhìn vào.

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