Вы должны использовать NVARCHAR в любое время вы должны хранить несколько языки. Я считаю, что вы должны использовать его для азиатских языков, но не цитируйте меня.
Вот проблема, если вы берете русский язык, например, и храните его в varchar, вы будете в порядке, пока вы определяете правильную кодовую страницу. Но предположим, что вы используете стандартную английскую sql-установку, тогда русские символы обрабатываются неправильно. Если вы используете NVARCHAR(), они будут обработаны должным образом.
Редактировать
Хорошо позвольте мне процитировать MSDN и Maybee я должен был конкретным, но вы не хотите хранить более одной кодовой страницы в колонке varcar, в то время как вы можете, вы не должны
Когда вы имеете дело с текстовыми данными, которые хранятся в CHAR, VARCHAR, VARCHAR (макс), или типом данных текста, то самого важное ограничения рассмотреть является то, что информация только из одной кодовой страницы может быть подтверждена система. (Вы можете хранить данные с с несколькими кодовыми страницами, но это не рекомендуется .) Точная кодовая страница, используемая для проверки и хранения данных, зависит от сортировки столбца . Если значение на уровне столбцов не определено , используется сортировка базы данных . Для определения кодовой страницы , используемая для данного столбца, вы можете использовать функцию COLLATIONPROPERTY , как показаны в следующем примерах кода:
Вот еще немного:
Этого примера иллюстрирует тот факт, что многих мест, таких как грузинский и Хинди, не имеют кодовых страниц, так как они являются сортировками только для Юникода.Эти сопоставления не подходят для колонн, которые используют CHAR, VARCHAR или тип данных текст
Так грузинский или хинди действительно нужно хранить как NVARCHAR. Арабский также проблема:
Еще одна проблема, вы можете столкнуться является неспособность хранить данные, когда не все символы, которые вы хотите поддержку содержатся в коде странице. Во многих случаях Windows считает конкретной кодовой страницей «лучшей подходящей» кодовой страницей, что означает, что есть , не гарантируется, что вы можете положиться на кодовую страницу для обработки всего текста; это просто лучший из доступных. примером этого является арабский сценарий: поддерживает широкий спектр языков, в том числе белуджей, берберские, фарси, Кашмира, казахском, киргизском, пушту, синдхи, уйгурский, урду, и многое другое. Все эти языки имеют дополнительные символы, кроме тех, на арабском языке , как это определено в коде Windows, страницы 1256. При попытке сохранить эти дополнительные символы в колонке, не Unicode, который имеет арабский сверку, персонажи преобразован в вопросительные знаки.
Что-то, о чем следует помнить при использовании Unicode, хотя вы можете хранить разные языки в одном столбце, вы можете сортировать только одну сортировку. Есть несколько языков, которые используют латинские символы, но не похожи на другие латинские языки. Акценты - хороший пример этого, я не могу вспомнить пример, но был восточно-европейский язык, у которого Y не был похож на английский Y. Тогда есть испанский ch, который испанский пользовательский expet будет отсортирован после h.
В целом со всеми проблемами, с которыми вам приходится иметь дело при работе с интернализацией. По моему мнению, проще всего использовать символы Unicode с самого начала, избегать дополнительных преобразований и снимать пробел. Отсюда мое заявление раньше.
>> Когда у вас разные языки в одной колонке ... Вот и все! –
Следует отметить, что * «разные языки» * означает не только то, что разные строки могут содержать значения с разных языков. Это также означает, что если стандартная сортировка базы данных (то есть локальная машина сервера) отличается от локали любого клиентского компьютера. например Серверная машина настроена на 'en-US', но мой компьютер настроен на' fr-US'. –
@IanBoyd В общем, сортировка будет очень проблематичной при смешивании языков в столбце и возвращении элементов на нескольких языках в одном наборе и использовании этой сортировки для упорядочения. Сопоставление также может влиять на комбинации персонажей, которые будут рассматриваться как один (венгерский dz и ly): http://www.sqlservercentral.com/Forums/Topic19439-9-1.aspx http://stackoverflow.com/questions/7207590/sql-server-case-collation-issue - nvarchar не собирается решать это –