2015-03-13 13 views
5

Mam plik DACPAC, który został zbudowany w Visual Studio 2013, dla projektu SSDT. Ten projekt SSDT definiuje skrypt po wdrożeniu przeznaczony do scalania niektórych danych statycznych w opublikowane tabele, a jedna część danych zawiera symbol praw autorskich.Publikowanie pliku DACPAC z MSDeploy, znaki UTF8 w skrypcie po wdrożeniu zostały utracone

Teraz, kiedy publikuję bazę danych za pomocą programu Visual Studio, symbol praw autorskich jest zachowywany i prawidłowo umieszczany w tabeli docelowej. Kiedy publikuję tę samą bazę danych (z tym samym profilem dacpac i publikować) przy użyciu MSDeploy, symbol praw autorskich jest scalany z docelową bazą danych jako "?" symbol. Podobnie, gdy używam Action:Script zamiast Action:Publish, wygenerowany skrypt SQL zawiera "?" zamiast symbolu praw autorskich.

Wygląda na to, że skrypt Visual Studio generuje kodowanie UTF8, ale skrypt upakowany w dacpac traci kodowanie UTF8. Czy ktoś ma pomysły na obejście tego problemu?

+1

Czy sprawdziłeś kodowanie samego pliku skryptu. Jeśli plik skryptu SQL znajduje się w ANSII, zapisz go jako UTF8. –

+0

Tak, sprawdziłem. Plik skryptu Post-Deployment w Visual Studio jest rzeczywiście zakodowany w UTF-8. Podobnie, plik postdeploy.sql, który zostanie rozpakowany po dwukrotnym kliknięciu pliku .dacpac, jest również kodowany w UTF-8. Porównałem również plik skryptu publikowania generowany przez program Visual Studio i ten, który został rozpakowany z pliku .dacpac. Jedyne różnice (w sekcji post-deploy, które warto wspomnieć) to utracone znaki specjalne. –

Odpowiedz

0

Czy prefiks literał łańcuchowy z N oznaczać, że zawiera ciąg Unicode? Czy twoja kolumna jest zdefiniowana jako nchar lub nvarchar? Proces tworzenia dakpac może wykonywać konwersję w oparciu o rozróżnienie, że twoje dane są zadeklarowane jako ciągi nie będące kodami Unicode. Nic dziwnego, że postać praw autorskich nie przetrwałaby tej konwersji.

Aby uzyskać szczegółowe informacje na temat ciągów znaków Unicode kontra znaków, zobacz https://msdn.microsoft.com/en-us/library/ms179899.aspx.

+0

Tak, wstępnie wpisałem ciąg znaków N '' i zadeklarowałem wszystkie odpowiednie typy jako NVARCHAR (len) w przeciwieństwie do VARCHAR (len). Dziwne jest to, że Visual Studio wydaje się działać dobrze, jeśli uruchomię operację publikowania za pośrednictwem menu kontekstowego w projekcie SSDT. To właśnie wtedy, gdy wdrażam DACPAC poprzez SqlPackage lub MSBuild, kodowanie znaków jest niepoprawne. –

0

Miałem ten sam problem. Otwórz ten plik w Notatniku i zapisz jako Unicode w tym samym folderze, aby zastąpić stary. Następnie opublikuj ponownie. Powinno działać.

Powiązane problemy