2015-03-13 6 views
5

У меня есть файл DACPAC, который был встроен в Visual Studio 2013 для проекта SSDT. Этот проект SSDT определяет сценарий пост-развертывания, предназначенный для объединения некоторых статических данных в опубликованные таблицы, а одна часть данных содержит символ авторского права.Публикация файла DACPAC с MSDeploy, символы UTF8 в сценарии после развертывания теряются

Теперь, когда я публикую базу данных через Visual Studio, символ авторского права сохраняется и корректно сливается в целевую таблицу. Когда я публикую одну и ту же базу данных (с тем же дакпаком и публикую профиль) с использованием MSDeploy, символ авторского права объединяется в целевую базу данных как «?» символ. Аналогично, когда я использую Action:Script вместо Action:Publish, сгенерированный SQL-скрипт содержит «?» а не символом авторского права.

Кажется, что сценарий Visual Studio генерирует кодировку UTF8, но скрипт, который запекается в dacpac, теряет кодировку UTF8. Кто-нибудь есть идеи о том, как обойти эту проблему?

+1

Вы проверили кодировку самого файла сценария. Если файл сценария SQL находится в ANSII, сохраните его как UTF8. –

+0

Да, я проверил. Файл сценария Post-Deployment в Visual Studio действительно кодируется в UTF-8. Аналогично, файл postdeploy.sql, который распаковывается, если я дважды щелкаю файл .dacpac, также кодируется в кодировке UTF-8. Я также сравнил файл сценария публикации, который генерируется Visual Studio, и тот, который распакован из файла .dacpac. Единственными отличиями (в разделе после развертывания, которые стоит упомянуть) были потерянные специальные символы. –

ответ

0

Вы префикс строкового литерала N, чтобы обозначить, что он содержит строку Unicode? Определяется ли ваша колонка как nchar или nvarchar? Процесс создания dacpac может выполнять преобразование, основанное на различии, которое ваши данные объявлены как строка, отличная от юникода. Неудивительно, что авторский характер не переживет это преобразование.

См. https://msdn.microsoft.com/en-us/library/ms179899.aspx для получения дополнительной информации о символах Unicode.

+0

Да, я префикс строковых значений с помощью N '' и объявил все соответствующие типы как NVARCHAR (len), а не VARCHAR (len). Странно, что Visual Studio работает нормально, если я запускаю операцию публикации через контекстное меню в проекте SSDT. Это просто, когда я развертываю DACPAC через SqlPackage или MSBuild, что кодировка символов неверна. –

0

У меня была та же проблема. Откройте этот файл в блокноте и сохраните его как unicode в той же папке, чтобы заменить старый. Затем опубликуйте снова. Он должен работать.

 Смежные вопросы

  • Нет связанных вопросов^_^