Bạn nên sử dụng NVARCHAR bất cứ lúc nào bạn phải lưu trữ nhiều ngôn ngữ. Tôi tin rằng bạn phải sử dụng nó cho các ngôn ngữ châu Á nhưng không báo cho tôi về nó.
Đây là vấn đề nếu bạn lấy tiếng Nga ví dụ và lưu trữ nó trong một varchar, bạn sẽ được miễn là bạn xác định đúng trang mã. Nhưng giả sử bạn sử dụng cài đặt sql tiếng Anh mặc định, thì các ký tự tiếng Nga sẽ không được xử lý chính xác. Nếu bạn đang sử dụng NVARCHAR(), chúng sẽ được xử lý đúng cách.
Sửa
Ok tôi xin trích dẫn MSDN và maybee tôi là cụ thể nhưng bạn không muốn lưu trữ trang hơn sau đó một mã trong một cột varcar, trong khi bạn có thể bạn không nên
Khi bạn xử lý dữ liệu văn bản là được lưu trữ trong char, varchar, varchar (tối đa) hoặc loại dữ liệu văn bản, giới hạn quan trọng nhất cần xem xét là chỉ có thể xác thực thông tin từ một trang mã đơn . số hệ thống. (Bạn có thể lưu trữ dữ liệu từ nhiều trang mã, nhưng đây không phải là được đề nghị.) Trang mã chính xác được sử dụng để xác thực và lưu trữ dữ liệu phụ thuộc trên collation của cột. Nếu số đối chiếu cấp không được định nghĩa là , thì việc đối chiếu cơ sở dữ liệu được sử dụng. Để xác định mã trang được sử dụng cho một cột nào đó, bạn có thể sử dụng chức năng COLLATIONPROPERTY , như thể hiện trong đang ví dụ sau đây:
Dưới đây là một số chi tiết:
Ví dụ này minh họa thực tế rằng nhiều ngôn ngữ, chẳng hạn như Gruzia và Tiếng Hin-ddi, không có các trang mã, vì chúng là các đối chiếu chỉ Unicode.Những collations không thích hợp cho cột sử dụng char, varchar, hoặc kiểu dữ liệu văn bản
Vì vậy, Gruzia hay Tiếng Hin-ddi thực sự cần phải được lưu trữ như nvarchar. Ả Rập cũng là một vấn đề:
Một vấn đề bạn có thể gặp là không có khả năng lưu trữ dữ liệu khi không tất cả các ký tự mà bạn muốn hỗ trợ được chứa trong các mã trang. Trong nhiều trường hợp, Windows coi một trang mã cụ thể là trang "phù hợp nhất" phù hợp, có nghĩa là có không đảm bảo rằng bạn có thể dựa trên trang mã để xử lý tất cả văn bản; nó là chỉ là cái tốt nhất có sẵn. An ví dụ về điều này là chữ viết tiếng Ả Rập: nó hỗ trợ nhiều ngôn ngữ, bao gồm Baluchi, Berber, Farsi, Kashmiri, Kazakh, Kirghiz, Pashto, Sindhi, Uighur, Urdu và hơn thế nữa. Tất cả các các thứ tiếng có thêm nhân vật ngoài những người trong tiếng Ả Rập ngôn ngữ theo quy định trong Windows đang trang 1256. Nếu bạn cố gắng để lưu trữ những nhân vật phụ trong một cột phi Unicode có collation Ả Rập , các nhân vật được chuyển đổi thành dấu chấm hỏi.
Điều cần ghi nhớ khi bạn sử dụng Unicode mặc dù bạn có thể lưu trữ các ngôn ngữ khác nhau trong một cột, bạn chỉ có thể sắp xếp bằng một lần đối chiếu. Có một số ngôn ngữ sử dụng các ký tự latin nhưng không giống như các ngôn ngữ latin khác. Điểm nhấn là một ví dụ tốt về điều này, tôi không thể nhớ lại ví dụ nhưng có một ngôn ngữ Đông Âu mà Y không sắp xếp giống như tiếng Anh Y. Sau đó, có tiếng Tây Ban Nha mà tiếng Tây Ban Nha người dùng hết hạn để được sắp xếp sau h.
Tất cả trong tất cả các vấn đề bạn phải đối phó khi xử lý nội bộ hóa. Đó là ý kiến của tôi đó là dễ dàng hơn để chỉ cần sử dụng các ký tự Unicode từ đầu, tránh các chuyển đổi thêm và mất không gian hit. Do đó tuyên bố của tôi trước đó.
>> khi bạn có các ngôn ngữ khác nhau trong cùng một cột .... Đó là nó! –
Cần lưu ý rằng * "các ngôn ngữ khác nhau" * không chỉ có nghĩa là các hàng khác nhau có thể chứa các giá trị từ các ngôn ngữ khác nhau. Nó cũng có nghĩa là nếu đối chiếu mặc định của cơ sở dữ liệu (tức là miền địa phương của máy chủ) khác với ngôn ngữ của bất kỳ máy tính khách nào. ví dụ. Máy chủ được đặt thành 'en-US', nhưng PC của tôi được đặt thành' fr-US'. –
@IanBoyd Nói chung, đối chiếu sẽ có vấn đề cao khi trộn các ngôn ngữ trong một cột và trả về các mục bằng nhiều ngôn ngữ trong một bộ duy nhất và sử dụng đối chiếu đó để đặt hàng. Collation cũng có thể có ảnh hưởng đến các ký tự được kết hợp để được coi là một (Hungary dz và ly): http://www.sqlservercentral.com/Forums/Topic19439-9-1.aspx http://stackoverflow.com/questions/7207590/sql-server-case-collation-issue - nvarchar sẽ không giải quyết rằng –