【问题标题】:Perforce corrupting .sql files when adding添加时强制损坏 .sql 文件
【发布时间】:2017-10-11 04:50:08
【问题描述】:

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

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

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

我打开 Helix,切换到我的工作区,右键单击文件,单击“标记为添加”

Perforce 将该文件标记为类型text+k

右键文件,点击“提交”,填写我的提交信息,点击“提交”

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

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

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

USE TestDatabase
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

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

我怎样才能阻止这种情况发生?如果您能告诉我如何恢复我花费大量时间的文件,则可以加分。

【问题讨论】:

  • 你看过这个帖子吗:answers.perforce.com/articles/KB/3444
  • @DavidTansey 我直到现在才知道。这基本上就是我想要的。现在我需要发泄一下在重写我的脚本时这是多么愚蠢。谢谢。
  • 您应该能够通过告诉 SSMS 您要使用 ANSI 而不是 UNICODE 来解决问题。请尝试以下操作,看看它是否可以解决您的问题:SSMS Tools | Options | Environments | International Settings,然后将语言从 English 更改为 Same as Microsoft Windows。请让我们知道结果。

标签: sql-server perforce corruption


【解决方案1】:

Perforce 将该文件标记为 text+k 类型

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

text+k //....sql

甚至可能:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    1. 在 SSMS 中,转到文件 > 另存为...
    2. 输入所需的文件名。
    3. 在“保存”按钮上,单击向下箭头并选择“使用编码保存...”。
    4. 选择“Unicode(带有签名的UTF-8)-代码页65001”以保存为带有字节顺序标记的UTF-8。
    5. 选择正确的行尾。大多数系统都使用 Windows,但有些系统需要 Unix 行结尾。

    如果 UTF-8 不起作用,或者您的应用程序不喜欢字节顺序标记,您可以尝试类似“US-ASCII - Codepage 20127”或“Western European (Windows) - Codepage 1252”之类的内容。后者就是通常所说的“ANSI”。 US-ASCII 仅适用于原始 256 ASCII 表中的字符以外的字符,因此您会丢失任何变音符号。但是,如果您使用的所有内容都是通用英语,它就可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-31
      • 2012-12-05
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多