Конвертировать Varchar в NVarchar? - PullRequest
       63

Конвертировать Varchar в NVarchar?

13 голосов
/ 20 октября 2011

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

Однако есть ли риск изменения данных при преобразовании типа данных varchar в nvarchar?

Ответы [ 3 ]

6 голосов
/ 20 октября 2011

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

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

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


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

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

3 голосов
/ 20 октября 2011

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

1 голос
/ 20 октября 2011

Из этой статьи 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 может содержать только 4000 символов (не байт) максимум.

...