При публикации файла DACPAC с помощью MSDeploy символы UTF8 в сценарии после развертывания теряются

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

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

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


person Michael J. Heier    schedule 13.03.2015    source источник
comment
Вы проверили кодировку самого файла сценария. Если файл сценария SQL находится в ANSII, сохраните его как UTF8.   -  person Vadim Loboda    schedule 15.03.2015
comment
Да, я проверил. Файл сценария после развертывания в Visual Studio действительно закодирован в UTF-8. Аналогично, файл postdeploy.sql, который распаковывается, если я дважды щелкну файл .dacpac, также имеет кодировку UTF-8. Я также сравнил файл сценария публикации, созданный Visual Studio, и файл, распакованный из файла .dacpac. Единственными отличиями (в разделе после развертывания, о котором стоит упомянуть) были утерянные специальные символы.   -  person Michael J. Heier    schedule 17.03.2015
comment
Вы когда-нибудь находили для этого решение? Нашим обходным решением будет игнорирование процедуры, вызывающей нарушение, поскольку приведенные ниже обходные пути противоречат непрерывному развертыванию. Для нас игнорировать достаточно просто, поскольку у нас есть настраиваемый модификатор развертывания, который позволяет мне исключить любой шаг, нацеленный на рассматриваемый объект.   -  person rshadman    schedule 07.04.2018
comment
Есть новости по этой теме? Я столкнулся с такой же ситуацией после нескольких месяцев использования того же конвейера.   -  person Playing With BI    schedule 23.07.2021
comment
Я решил свою проблему, в моем случае создал представление и предоставил имя с копией и вставкой из excel, и это добавило еще один символ для символа -. Неправильный [Operations DB – Plant Master] правильный: [Operations DB - Plant Master]   -  person Playing With BI    schedule 23.07.2021


Ответы (2)


Я была такая же проблема. Откройте этот файл в блокноте и «сохраните как» кодировку UTF-8 в той же папке, чтобы заменить старую. Затем опубликуйте еще раз. Он должен работать.

Снимок экрана блокнота

person Nan Zheng    schedule 23.05.2016

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

См. https://msdn.microsoft.com/en-us/library/ms179899.aspx, чтобы узнать больше о символьных строках и юникоде.

person Michael Richardson    schedule 27.08.2015
comment
Да, я добавил к строковым значениям префикс N '' и объявил все соответствующие типы как NVARCHAR (len), а не как VARCHAR (len). Странно то, что Visual Studio, кажется, работает нормально, если я запускаю операцию публикации через контекстное меню в проекте SSDT. Просто когда я развертываю DACPAC через SqlPackage или MSBuild, кодировка символов получается неправильной. - person Michael J. Heier; 28.08.2015