2015-03-13 15 views
5

Tôi có tệp DACPAC được xây dựng trong Visual Studio 2013, cho một dự án SSDT. Dự án SSDT này định nghĩa một kịch bản hậu triển khai được thiết kế để kết hợp một số dữ liệu tĩnh vào các bảng đã xuất bản và một phần dữ liệu chứa một biểu tượng bản quyền.Xuất bản tệp DACPAC với MSDeploy, các ký tự UTF8 trong tập lệnh hậu triển khai bị mất

Bây giờ, khi tôi xuất bản cơ sở dữ liệu thông qua Visual Studio, biểu tượng bản quyền được giữ nguyên và hợp nhất chính xác vào bảng đích. Khi tôi xuất bản cùng một cơ sở dữ liệu (với cùng một dacpac và xuất bản hồ sơ) bằng cách sử dụng MSDeploy, biểu tượng bản quyền được hợp nhất vào cơ sở dữ liệu đích dưới dạng "?" ký hiệu. Tương tự như vậy, khi tôi sử dụng Action:Script thay vì Action:Publish, tập lệnh SQL được tạo có chứa "?" thay vì biểu tượng bản quyền.

Dường như nếu kịch bản Visual Studio là tạo được UTF8 mã hóa, nhưng kịch bản đó được nướng vào dacpac mất mã hóa UTF8. Có ai có bất kỳ ý tưởng về cách làm việc xung quanh vấn đề này?

+1

Bạn đã kiểm tra mã hóa của chính tệp tập lệnh chưa. Nếu tệp tập lệnh SQL nằm trong ANSII, lưu nó dưới dạng UTF8. –

+0

Có, tôi đã kiểm tra. Tệp Kịch bản hậu triển khai trong Visual Studio thực sự được mã hóa bằng UTF-8. Tương tự như vậy, tệp postdeploy.sql được giải nén nếu tôi nhấp đúp vào tệp .dacpac cũng được mã hóa UTF-8. Tôi cũng so sánh tệp kịch bản xuất bản được tạo bởi Visual Studio và tệp được giải nén từ tệp .dacpac. Sự khác biệt duy nhất (trong phần hậu triển khai, đáng nói đến) là các ký tự đặc biệt bị mất. –

Trả lời

0

Bạn có đầu tiên chuỗi ký tự bằng N để biểu thị rằng nó chứa chuỗi Unicode không? Cột của bạn có được định nghĩa là nchar hoặc nvarchar? Quá trình tạo dacpac có thể thực hiện một chuyển đổi dựa trên sự phân biệt mà dữ liệu của bạn được khai báo là một chuỗi không unicode. Nó không phải là đáng ngạc nhiên rằng các nhân vật bản quyền sẽ không tồn tại chuyển đổi này.

Xem https://msdn.microsoft.com/en-us/library/ms179899.aspx để biết chi tiết về chuỗi unicode so với chuỗi ký tự.

+0

Có, tôi đã đặt trước các giá trị chuỗi với N '' và khai báo tất cả các loại có liên quan là NVARCHAR (len) trái ngược với VARCHAR (len). Điều kỳ lạ là Visual Studio dường như hoạt động tốt nếu tôi chạy một hoạt động Publish thông qua menu ngữ cảnh trên dự án SSDT. Nó chỉ là khi tôi triển khai DACPAC thông qua SqlPackage hoặc MSBuild rằng mã hóa ký tự đi ra không chính xác. –

0

Tôi gặp vấn đề tương tự. Mở tệp này trong notepad và lưu dưới dạng unicode trong cùng thư mục để thay thế tệp cũ. Sau đó xuất bản lại. Nó sẽ hoạt động.

Các vấn đề liên quan