2012-07-03 5 views
2

Можем ли мы хранить многоязычный текст в varchar? Раньше я полагал, что для этих сценариев нам нужно иметь nvarchar, но когда я попробовал приведенный ниже код, он работал нормально.Несколько языков в varchar в SQL Server

DECLARE @name VARCHAR(100) 
SET @name='Hej mit navn er Vaibhav' 
SELECT @name 

Так я должен принять varchar или nvarchar для хранения многоязычного текста.

+1

'varchar' прекрасно до тех пор, пока вам не нужна поддержка юникода - для языков, таких как иврит, арабский, кириллица, китайский, японский, корейский и т.д. ** Имейте в виду: ** 'nvarchar' всегда использует 2 байта для каждого символа –

ответ

3

nvarchar магазины Unicode символов (которые поддерживают многие другие символы), varchar нет. Поскольку 'Hej mit navn er Vaibhav' не содержит символов Юникода, он работает отлично.

Так что я должен использовать varchar или nvarchar для хранения многоязычного текста.

Это зависит от вашей ситуации. nvarchar занимает в два раза больше места, чем varchar, поэтому, если у вас есть большая база данных, и вам не понадобится хранить дополнительные наборы символов, varchar будет иметь смысл. Однако пространство не может быть проблемой для вас с меньшей базой данных, и вы можете предпочесть использовать дополнительное пространство для использования символов Unicode в будущем.

С конкретным вопросом про многоязычный текст, я бы сказал, что, скорее всего, вы столкнулись с персонажами, которых varchar не может хранить.

+3

Обратите внимание, что при сжатии Unicode в 2008 R2 + (только для предприятия), nvarchar vs. varchar в значительной степени спорен, если у вас нет большого количества и большой дисперсии последовательностей символов Unicode на любом заданном стр. В противном случае nvarchar сжимает все символы, отличные от Unicode, как если бы они были varchar. –

+0

@AaronBertrand Я этого не знал. Благодаря! –

1

Использование NVARCHAR тип данных

DECLARE @name NVARCHAR(100) 
SET @name=N'Hej mit navn er Vaibhav' 
SELECT @name 
+2

Если вам это действительно не нужно, вы теряете 100% пространства - каждая строка 'nvarchar' всегда использует в два раза больше хранилища, чем строка' varchar'. Эти дополнительные байты должны быть сохранены, загружены с диска, переданы по сети ... –

+0

@marc_s true, если не используется сжатие Unicode (см. Мой другой комментарий). –

+0

@AaronBertrand: ах - интересно! Благодарю. Не знал о новой функции в 2008 R2! –