Измените тип данных varchar на nvarchar в существующей базе данных SQL Server 2005. Есть вопросы? - PullRequest
26 голосов
/ 16 ноября 2011

Мне нужно изменить типы данных столбца в таблице базы данных с varchar на nvarchar для поддержки китайских символов (в настоящее время поля varchar, содержащие эти символы, показывают только вопросительные знаки).

Я знаю, как изменить значения, но я хочу посмотреть, безопасно ли это делать. Есть ли что-то, на что нужно обратить внимание, прежде чем я сделаю изменения? Спасибо!

Ответы [ 5 ]

32 голосов
/ 17 ноября 2011

Обратите внимание, что это изменение является обновлением размера данных, см. Столбцы таблицы SQL Server под капотом . Изменение добавит новый столбец NVARCHAR, обновит каждую строку, копируя dta из старого VARCHAR в новый столбец NVARCHAR, а затем пометит старый столбец VARCHAR как удаленный. Если таблица большая, это создаст большой журнал, так что будьте к этому готовы. После обновления запустите DBCC CLEANTABLE, чтобы освободить место, использованное предыдущим столбцом VARCHAR. Если вы можете себе это позволить, лучше запустите ALTER TABLE ... REBUILD, который не только освободит место, но и полностью удалит физически удаленный столбец VARCHAR. Связанная статья в начале содержит больше деталей.

Вас также может заинтересовать включение сжатия Unicode для вашей таблицы.

29 голосов
/ 28 марта 2013

Вы можете сделать в полях не первичного ключа:

ALTER TABLE [TableName]
ALTER COLUMN [ColumnName] nvarchar(N) null

В полях первичного ключа это не будет работать - вам придется воссоздать таблицу

7 голосов
/ 16 ноября 2011

Убедитесь, что длина не превышает 4000, поскольку максимум для VARCHAR равен 8000, а для NVARCHAR только 4K.

3 голосов
/ 16 ноября 2011

Стол станет больше. Каждый символ в столбце займет вдвое больше места для хранения. Вы можете не заметить, если стол действительно большой.

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

2 голосов
/ 09 марта 2017

Проверьте все зависимости для этой таблицы, поскольку хранимые процедуры, функции, временные таблицы на основе этой таблицы и переменные, используемые для вставок / обновлений и т. Д., Возможно, также должны быть обновлены до NVARCHAR.Также проверьте, находится ли таблица в репликации!Это может вызвать новые проблемы!

...