2017-10-10 54 views
1

这是一个奇怪的现象,它现在已经发生过两次了,所以它不仅仅是一些怪异事件。Perforce在添加时会破坏.sql文件

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

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

我打开螺旋,切换到我的工作区,右单击该文件,点击“标记为新增”

的Perforce标志着文件类型text+k

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

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

enter image description here

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

我认为起初它只是将垃圾中的行之间,但前几行应改为:

USE TestDatabase 
GO 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

这意味着我的数据实际上被损坏了。

我该如何阻止这种情况发生?奖励积分,如果你能告诉我如何恢复这个文件,我花了很多时间。

+0

你见过这篇文章:http://answers.perforce.com/articles/KB/3444 –

+0

@DavidTansey我还没有到现在。这基本上是我所期待的。现在我需要在重写我的脚本时发掘这是多么愚蠢。谢谢。 –

+0

你应该可以通过告诉SSMS你想使用ANSI而不是UNICODE来解决问题。尝试以下操作以查看它是否解决了您的问题:SSMS'Tools' | '选项'| '环境'| “国际设置”,然后将语言从_英文_改为_Same作为Microsoft Windows_。请让我们知道结果。 –

回答

2

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

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

  1. 在SSMS,转到文件>另存为...
  2. 输入所需的文件名。
  3. 在保存按钮上,单击向下箭头并选择“使用编码保存...”。
  4. 选择“Unicode(带签名的UTF-8) - Codepage 65001”以保存为带有字节顺序标记的UTF-8。
  5. 选择正确的行尾。大部分系统都可以与Windows一起工作,但有些会希望Unix的行结束。

如果UTF-8不起作用,或者如果您的应用程序不喜欢的字节顺序标记,你可以尝试像“US-ASCII - 代码页20127”或“西欧(Windows)中 - 代码页1252。 “后者通常被称为“ANSI”。只有在原始256 ASCII表格以外的任何字符时,US-ASCII才会起作用,因此您将失去任何变音标记。但是,如果您使用的所有内容都是通用英语,那么它就可以正常工作。

3

的Perforce标志着文件类型文本+ K

Perforce公司从来没有默认文件+k自身。Perforce通常也会检测UTF-16文件(或至少是二进制文件)。我猜你的管理有typemap入口,看起来像:

text+k //....sql 

或甚至:

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

这是可恶,因为正如你已经了解到,迫使一些不ASCII到text类型可以破坏它。告诉你的管理员用+k代替text+k,这样它至少不会覆盖基本文件类型。

他们可能还想重新考虑在可能包含非ASCII文件的路径中启用关键字扩展功能 - 关键字扩展以某些二进制格式工作,但其他人可能不会感激它,而且这也是性能问题,因为文件每次提交后都需要“刷新”,以确保所有关键字都重新展开。我总是建议更具体地使用+k选项,并逐个文件地启用它(即,将$关键字$添加到文件的用户应该在当时将+k添加到文件类型),而不是使用类型映射。