Преобразование Varchar в NVarchar?

Я знаю, когда преобразование из nvarchar до varchar некоторые данные будут утеряны/изменены.

однако существуют ли какие-либо риски изменения данных при преобразовании varchar тип данных nvarchar?

3 ответов


nvarchar хранит символы юникода, которые в два раза больше символов varchar. Так что, пока ваш nvarchar по крайней мере в два раза превышает длину вашего vchar, это не будет проблемой.

преобразование другим способом может быть достигнуто при условии, что вы не использовали символы вне диапазона символов ASCII (т. е. у вас нет символов Юникода)

короче говоря, убедитесь, что ваши длины nvarchar в два раза больше вашего самого большого значения varchar, а затем сделайте изменение.


поскольку я, похоже, получил пару downvotes об этом (без объяснения), я хочу прояснить, что когда я ссылаюсь на длину выше, я имею в виду размер, например, тот объем требуемых данных хранения. Обратите внимание на мой комментарий ниже, который я также включу здесь:

Если вы говорите об изменении длины с помощью SQL, то я думаю, что вы должно быть нормально иметь такую же длину. Это потому, что когда вы указываете длину вы делаете так о количестве символов, а не фактически количество данных, которые хранятся


по большей части два типа данных идентичны в том, как вы бы работы с ними в SQL Server или из приложения. Этот разница в том, что nvarchar используется для хранения данных unicode, которые используется для хранения многоязычных данных в таблицах базы данных. Другой языки имеют расширенный набор кодов символов, которые должны быть сохранено, и этот тип данных позволяет использовать это расширение. Если ваша база данных не будет хранить многоязычные данные, которые вы должны использовать varchar вместо этого тип данных. Причина этого в том, что nvarchar занимает в два раза больше много места как varchar, это из-за необходимости хранить расширенные коды символов для других языков.

(from:http://weblogs.asp.net/guys/archive/2005/01/15/353550.aspx)

таким образом, nvarchar является надмножеством varchar, поэтому вы не должны терять данные при преобразовании.


из этой статьи http://searchsqlserver.techtarget.com/tip/Differences-between-varchar-and-nvarchar-in-SQL-Server

VARCHAR хранится как обычные 8-битные данные. Но строки NVARCHAR хранится в базе данных в кодировке UTF-16 - 16 бит или два байта на символ, все время-и преобразуется в любую кодовую страницу, используемую подключение к базе данных на выходе (обычно UTF-8). Тем не менее, NVARCHAR струны имеют те же ограничения длины их тип varchar Казинс - 8000 байт. Однако, поскольку NVARCHARs использует два байта для каждого символ, это означает, что данный NVARCHAR может содержать только 4,000 символов (не байты) максимум.