Вы должны использовать NVARCHAR в любое время, когда вам нужно хранить несколько языков. Я считаю, что вы должны использовать его для азиатских языков, но не цитируйте меня на нем.
Вот проблема, если вы, например, берете русский язык и сохраняете его в varchar, у вас все будет хорошо, если вы определите правильную кодовую страницу. Но допустим, что вы используете стандартную установку sql на английском языке, тогда русские символы не будут обрабатываться правильно. Если бы вы использовали NVARCHAR (), они были бы обработаны правильно.
Редактировать
Хорошо, позвольте мне процитировать MSDN и, может быть, я был конкретен, но вы не хотите хранить более одной кодовой страницы в столбце varcar, а вы не должны
Когда вы имеете дело с текстовыми данными, которые
хранится в полукоксе, varchar,
varchar (max) или текстовый тип данных,
самое важное ограничение для рассмотрения
является то, что только информация из одного
кодовая страница может быть подтверждена
система. (Вы можете хранить данные из
несколько кодовых страниц, но это не
рекомендуется.) Точная кодовая страница используется
для проверки и хранения данных зависит
на сопоставление столбца. Если
сопоставление на уровне столбцов не было
определен, сопоставление базы данных
используется. Определить кодовую страницу
который используется для данного столбца, вы
можно использовать COLLATIONPROPERTY
функция, как показано в следующем
примеры кода:
Вот еще немного:
Этот пример иллюстрирует тот факт, что
много мест, таких как грузинский и
Хинди, нет кодовых страниц, так как они
Unicode-только сопоставления. Те
параметры сортировки не подходят для
столбцы, которые используют char, varchar или
тип текстовых данных
Так что грузинский или хинди действительно нужно хранить как nvarchar. Арабский также проблема:
Другая проблема, с которой вы можете столкнуться,
невозможность хранить данные, когда нет
все персонажи, которых вы хотите
поддержка содержится в коде
стр. Во многих случаях Windows считает
определенная кодовая страница, чтобы быть "лучшим
соответствовать "кодовой странице, что означает, что есть
нет никаких гарантий, что вы можете положиться на
кодовая страница для обработки всего текста; это
просто лучший из доступных.
Примером этого является арабский алфавит:
он поддерживает широкий спектр языков,
в том числе белуджи, бербер, фарси,
Кашмирцы, казахи, киргизы, пушту,
Синдхи, уйгурский, урду и многое другое. Все
эти языки имеют дополнительные
персонажи за пределами арабского
язык, определенный в коде Windows
страница 1256. Если вы пытаетесь сохранить
эти дополнительные символы в
столбец не в Юникоде с арабским
сопоставление, символы
преобразован в вопросительные знаки.
Что следует иметь в виду, когда вы используете Unicode, хотя вы можете хранить разные языки в одном столбце, вы можете сортировать только с помощью одного сопоставления. Есть некоторые языки, которые используют латинские символы, но не сортируют как другие латинские языки. Акценты - хороший пример этого, я не могу вспомнить пример, но был восточноевропейский язык, Y которого не сортировался как английский Y. Тогда есть испанский ch, который испанские пользователи объясняют, чтобы быть отсортированным после h.
В целом все вопросы, с которыми вам приходится иметь дело при интернационализации. По моему мнению, проще использовать символы Юникода с самого начала, избегать дополнительных преобразований и использовать пробел. Отсюда и мое заявление ранее.