【问题标题】:Publishing DACPAC file with MSDeploy, UTF8 characters in post-deploy script are lost使用 MSDeploy 发布 DACPAC 文件,部署后脚本中的 UTF8 字符丢失
【发布时间】:2015-05-16 12:36:51
【问题描述】:

我有一个在 Visual Studio 2013 中为 SSDT 项目构建的 DACPAC 文件。本 SSDT 项目定义了一个部署后脚本,旨在将一些静态数据合并到已发布的表中,其中一条数据包含版权符号。

现在,当我通过 Visual Studio 发布数据库时,版权符号被保留,并正确合并到目标表中。当我使用 MSDeploy 发布相同的数据库(具有相同的 dacpac 和发布配置文件)时,版权符号作为“?”合并到目标数据库中。象征。同样,当我使用Action:Script 而不是Action:Publish 时,生成的SQL 脚本包含一个“?”而不是版权符号。

似乎 Visual Studio 正在生成的脚本是 UTF8 编码的,但被烘焙到 dacpac 中的脚本会丢失 UTF8 编码。有没有人知道如何解决这个问题?

【问题讨论】:

  • 您是否检查过脚本文件本身的编码。如果 SQL 脚本文件在 ANSII 中,则将其保存为 UTF8。
  • 是的,我查过了。 Visual Studio 中的部署后脚本文件确实以 UTF-8 编码。同样,如果我双击 .dacpac 文件,解压的 postdeploy.sql 文件也是 UTF-8 编码的。我还比较了由 Visual Studio 生成的发布脚本文件和从 .dacpac 文件中解压缩的发布脚本文件。唯一的区别(在部署后部分,值得一提)是丢失的特殊字符。
  • 您找到解决方案了吗?我们的解决方法将是忽略违规过程,因为以下解决方法将不利于持续部署。对我们来说,忽略很容易,因为我们有一个可自定义的部署修改器,它允许我排除针对相关对象的任何步骤。
  • 关于这个话题的任何更新?在使用相同的管道几个月后,我面临同样的情况。
  • 我解决了我的问题,在我的例子中创建了一个视图,并提供了从 excel 复制和粘贴的名称,并为“-”符号添加了另一个字符。错一个[Operations DB – Plant Master] 对一个:[Operations DB - Plant Master]

标签: sql-server utf-8 msdeploy sql-server-data-tools dacpac


【解决方案1】:

您是否在字符串文字前加上 N 以表示它包含 Unicode 字符串?您的列是否定义为ncharnvarchar?创建 dacpac 的过程可能会根据您的数据被声明为非 unicode 字符串的区别来执行转换。版权字符无法在此转换中幸存下来也就不足为奇了。

有关 unicode 与字符串的详细信息,请参阅 https://msdn.microsoft.com/en-us/library/ms179899.aspx

【讨论】:

  • 是的,我在字符串值前面加上了 N'',并将所有相关类型声明为 NVARCHAR(len) 而不是 VARCHAR(len)。奇怪的是,如果我通过 SSDT 项目的上下文菜单运行发布操作,Visual Studio 似乎工作得很好。只是当我通过 SqlPackage 或 MSBuild 部署 DACPAC 时,字符编码不正确。
【解决方案2】:

我有同样的问题。在记事本中打开此文件,并在同一文件夹中“另存为”UTF-8 编码以替换旧文件。然后再次发布。它应该可以工作。

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 2016-05-09
    • 2015-11-26
    • 2015-11-26
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多