2015-03-13 7 views
5

Ich habe eine DACPAC-Datei, die in Visual Studio 2013 für ein SSDT-Projekt erstellt wurde. Dieses SSDT-Projekt definiert ein Post-Deployment-Skript, das entworfen wurde, um einige statische Daten in die veröffentlichten Tabellen zusammenzuführen, und ein Teil der Daten enthält ein Copyright-Symbol.Veröffentlichen von DACPAC-Datei mit MSDeploy, UTF8-Zeichen in Post-deploy-Skript sind verloren

Jetzt, wenn ich die Datenbank über Visual Studio veröffentliche, wird das Copyright-Symbol beibehalten und korrekt in die Zieltabelle zusammengeführt. Wenn ich dieselbe Datenbank (mit demselben dacpac- und Veröffentlichungsprofil) unter Verwendung von MSDeploy veröffentliche, wird das Copyright-Symbol in der Zieldatenbank als "?" Symbol. Ebenso, wenn ich Action:Script anstelle von Action:Publish verwende, enthält das generierte SQL-Skript ein "?" anstatt das Copyright-Symbol.

Es scheint, als ob das Skript, das Visual Studio generiert, UTF8-codiert ist, aber das Skript, das in den Dacpac gebrannt wird, verliert die UTF8-Kodierung. Hat jemand irgendwelche Ideen, wie man dieses Problem umgehen kann?

+1

Haben Sie eine Codierung der Skriptdatei selbst überprüft. Wenn die SQL-Skriptdatei in ANSII gespeichert ist, speichern Sie sie als UTF8. –

+0

Ja, ich überprüfte. Die Post-Deployment-Skriptdatei in Visual Studio ist tatsächlich in UTF-8 codiert. Ebenso wird die postdeploy.sql-Datei, die entpackt wird, wenn ich auf die .dacpac-Datei doppelklicke, ebenfalls UTF-8-codiert. Ich habe auch die Veröffentlichungsskriptdatei verglichen, die von Visual Studio generiert wird, und diejenige, die aus der .dacpac-Datei entpackt wurde. Die einzigen Unterschiede (im Post-Deploy-Bereich, erwähnenswert) waren die verlorenen Sonderzeichen. –

Antwort

0

Präfix das Zeichenfolgenliteral mit N, um anzuzeigen, dass es eine Unicode-Zeichenfolge enthält? Ist Ihre Spalte definiert als nchar oder nvarchar? Der Prozess zum Erstellen des Dacpacs kann eine Konvertierung basierend auf der Unterscheidung ausführen, dass Ihre Daten als Nicht-Unicode-Zeichenfolge deklariert sind. Es ist nicht verwunderlich, dass der Copyright-Charakter diese Konvertierung nicht überleben würde.

Einzelheiten zu Unicode- und Zeichenfolgen finden Sie unter https://msdn.microsoft.com/en-us/library/ms179899.aspx.

+0

Ja, ich habe die String-Werte mit N 'vorangestellt und alle relevanten Typen als NVARCHAR (len) im Gegensatz zu VARCHAR (len) deklariert. Die seltsame Sache ist, dass Visual Studio scheint gut zu funktionieren, wenn ich eine Veröffentlichen-Operation über das Kontextmenü auf dem SSDT-Projekt ausführen. Nur wenn ich den DACPAC über SqlPackage oder MSBuild bereitstellen, kommt die Zeichencodierung falsch. –

0

Ich hatte das gleiche Problem. Öffnen Sie diese Datei im Editor und speichern Sie sie als Unicode im selben Ordner, um den alten zu ersetzen. Dann wieder veröffentlichen. Es sollte funktionieren.

Verwandte Themen