Należy użyć nvarchar każdej chwili masz do przechowywania wielu Języki. Uważam, że musisz go używać w językach azjatyckich, ale nie cytuj mnie na nim.
Oto problem, jeśli weźmiesz na przykład język rosyjski i zapiszesz go w varcharze, wszystko będzie dobrze, o ile zdefiniujesz poprawną stronę kodową. Ale powiedzmy, że używasz domyślnej angielskiej instalacji sql, wtedy rosyjskie znaki nie będą obsługiwane poprawnie. Jeśli używasz NVARCHAR(), będą one obsługiwane poprawnie.
Edit
Ok niech sobie zacytować MSDN i maybee miałem specyficzne, ale nie chcesz, aby zapisać stronę więcej niż jednego kodu w kolumnie varcar, póki możesz nie należy
Kiedy masz do czynienia z danych tekstowych, które są przechowywanych w char, varchar, varchar (max) lub typu danych tekstowych, najważniejszym ograniczeniem rozważyć jest to, że tylko informacje z jednego strony kodowej mogą zostać zatwierdzone przez system. (Można przechowywać dane z wielu stron kodowych , ale nie jest to zalecane ). Dokładna strona kodowa używana do sprawdzania i zapisywania danych używana jest w zakresie sortowania kolumny. Jeśli zdefiniowanie poziomu kolumn na poziomie nie zostało zdefiniowane, używane jest sortowanie bazy danych . Aby określić stronę kodową , który jest używany dla danej kolumny, ty można korzystać z funkcji COLLATIONPROPERTY , jak pokazano w następujących przykłady kodu:
Oto kilka:
Ten przykład ilustruje fakt, że wiele ustawień narodowych, takich jak gruziński i hindi, nie ma stron kodowych, ponieważ one są są tylko opcjami w formacie Unicode.Te sortowania nie są odpowiednie dla kolumn, które korzystają z char, varchar, lub typ danych tekstu
Więc gruziński lub hindi naprawdę muszą być przechowywane jako nvarchar. Arabski jest również problemem:
Kolejny problem może wystąpić jest niezdolność do przechowywania danych, gdy nie wszystkie znaki, które chcesz wsparcia zawarte są w kodzie stronie. W wielu przypadkach system Windows uważa, że konkretna strona kodowa jest jedną z "najlepszych" stron kodowych , co oznacza, że jest bez gwarancji, że można polegać na stronie kodowej , aby obsłużyć cały tekst; to jest tylko najlepsza dostępna. Przykładem tego jest arabski skrypt: obsługuje szeroki wachlarz języków, , w tym Baluchi, Berber, Farsi, Kaszmirski, Kazachski, Kirgiski, Pashto, Sindhi, Ujgur, Urdu i inne. Wszystkie języki te mają dodatkowe znaków poza tymi w języku arabskim zdefiniowane w kodzie dla Windows strona 1256. Jeśli spróbujesz zapisać te dodatkowe znaki w kolumnie non-Unicode, który ma arabski sortowania, znaki są skonwertowane na znaki zapytania.
Należy pamiętać o używaniu Unicode, chociaż można przechowywać różne języki w jednej kolumnie, którą można sortować tylko za pomocą pojedynczego sortowania. Niektóre języki używają znaków łacińskich, ale nie sortują tak, jak inne języki łacińskie. Akcenty są tego dobrym przykładem, nie mogę sobie przypomnieć przykładu, ale był tam język wschodnioeuropejski, którego Y nie sortował tak jak angielski Y. Potem jest hiszpański ch, którego hiszpańscy użytkownicy muszą posortować po h.
Podsumowując, wszystkie problemy, z którymi musisz sobie poradzić w przypadku internalizacji. Uważam, że łatwiej jest po prostu używać znaków Unicode od samego początku, uniknąć dodatkowych konwersji i wykonać trafienie w kosmos. Stąd moje oświadczenie wcześniej.
>> gdy masz różne języki w tej samej kolumnie .... To wszystko! –
Należy zauważyć, że * "różne języki" * nie oznacza tylko, że różne wiersze mogą zawierać wartości z różnych języków. Oznacza to również, że domyślne sortowanie bazy danych (tj. Ustawienia narodowego maszyny serwera) różni się od ustawień regionalnych dowolnego komputera klienckiego. na przykład Maszyna serwerowa jest ustawiona na 'en-US', ale mój komputer jest ustawiony na' fr-US'. –
@IanBoyd Ogólnie rzecz biorąc, zestawianie będzie bardzo problematyczne podczas mieszania języków w kolumnie i zwracania elementów w wielu językach w jednym zestawie i korzystania z tego sortowania do zamawiania. Sortowanie może również mieć wpływ na łączenie znaków, które będą traktowane jako jedno (węgierskie dz i ly): http://www.sqlservercentral.com/Forums/Topic19439-9-1.aspx http://stackoverflow.com/questions/7207590/sql-server-case-collation-issue - nvarchar nie rozwiąże tego problemu –