Подтвердить что ты не робот

Измените тип данных varchar на nvarchar в существующей базе данных SQL Server 2005. Любые проблемы?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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