添加时强制损坏 .sql 文件

Perforce corrupting .sql files when adding

这件事很奇怪,我已经发生过两次了,所以这不仅仅是一些奇怪的事件。

我想向我的项目添加一个新的 .sql 文件。

我打开了 SQL Management Studio 2012,编写了我的脚本并保存了它。

我打开 Helix,切换到我的工作区,右键单击该文件,单击 "Mark for Add"

Perforce 将该文件标记为 text+k

类型

右键单击文件,单击"Submit",填写我的提交信息,然后单击"Submit"

我回到我的文件,它看起来像这样:

(我无法粘贴文本,因为 Whosebug 认为这是垃圾邮件)

一开始我以为只是在行与行之间添加垃圾,但前几行应该是:

USE TestDatabase
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

这意味着我的数据实际上以某种方式被破坏了。

我怎样才能阻止这种情况发生?如果你能告诉我如何恢复这个我花了很多时间的文件,加分。

这是一个文件编码问题。 SSMS 2012 作为 Microsoft 产品,将默认使用 UTF-16 编码。许多应用程序假设所有文本文件现在都将是 UTF-8,因为它是事实上的(通常是法律上的)网络编码。

您可以告诉 SSMS 2012 将文件保存为 UTF-8。

  1. 在 SSMS 中,转到文件 > 另存为...
  2. 输入所需的文件名。
  3. 在“保存”按钮上,单击向下箭头和 select "Save with Encoding..."。
  4. Select "Unicode (UTF-8 with signature) - Codepage 65001" 保存为带字节顺序标记的UTF-8。
  5. Select 正确的行结尾。大多数系统使用 Windows,但有些系统需要 Unix 行结尾。

如果 UTF-8 不起作用或者如果您的应用程序不喜欢字节顺序标记,您可以尝试 "US-ASCII - Codepage 20127" 或 "Western European (Windows) - Codepage 1252." 后者通常被称为 "ANSI"。 US-ASCII 仅在原始 256 ASCII table 以外的任何字符时才有效,因此您会丢失任何变音符号。但是,如果您使用的所有内容都是普通英语,它就可以正常工作。

Perforce marked that file as type text+k

Perforce 从不将文件默认为 +k。 Perforce 通常还会检测 UTF-16 文件本身(或至少是二进制文件)。我猜你的管理员有一个看起来像这样的 typemap 条目:

text+k //....sql

或者甚至:

text+k //some/path/...

这是可恶的,因为如您所知,将非 ASCII 的内容强制转换为 text 类型会破坏它。告诉您的管理员将 text+k 替换为简单的 +k,这样它至少不会覆盖基本文件类型。

他们可能还想重新考虑在可能包含非 ASCII 文件的路径上默认启用关键字扩展 -- 关键字扩展适用于某些二进制格式,但其他人可能不喜欢它,而且它也会影响性能,因为每次提交后文件都需要 "refreshed" 以确保重新扩展存在的任何关键字。我总是建议更具体地使用 +k 选项并在逐个文件的基础上启用它(即,将 $Keyword$ 添加到文件的用户应该将 +k 添加到文件类型那个时候)而不是使用类型映射。