为什么Mercurial认为我的SQL文件是二进制文件?

Bri*_*van 47 sql-server mercurial

我只是使用SQL Server Management Studio编写了我的SQL Server存储过程,表定义等,并尝试将它们添加到我的Mercurial源代码控制存储库中.他们添加得很好,但是现在当我改变和区分它们时,Mercurial称它们为"二进制文件"并且没有给我一个适当的统一差异.

我认为编码可能是一个问题,所以我尝试重新生成脚本并为文本文件输出指定ANSI,但我得到了相同的行为.我可以在记事本中查看它们,没有任何奇怪的字符出现.为什么Mercurial认为这些文件是二进制文件?

否则,如果有人可以推荐一个很好的工具来编写可能不会导致此问题的SQL Server数据库,那么这也可能有用.

小智 38

我遇到了这个问题,因为SQL Server Management Studio将文件保存为Unicode.Unicode文本文件的前两个字节(大多数时间)定义编码.大多数较新的文本编辑器(例如记事本)都透明地处理这个问题.

前两个字节可能是你的问题所在.它们可能看起来像ÿþ.或FF FE十六进制.

在"保存"对话框上的"保存"按钮上是一个选择列表.选择"使用编码保存..."并选择"US-ASCII-Codepage20127".我相信这个设置是粘性的,并将保留以供将来保存.

  • 很高兴知道为什么hg认为它是二元的,但最好找到一个修复mercurial以迫使它改变主意.重新保存所有脚本是一个丑陋的解决方法.问题是多变的,而不是在文件中. (7认同)
  • 要明确的是,问题不在于Unicode.它是UTF-16,它嵌入了空值.除非您实际使用U + 0000(一般不会使用SQL文件),否则UTF-8不会. (5认同)
  • 这不是一个粘性设置,至少在 SSMS 2012 中不是。然而,这是一个巨大的痛苦。 (2认同)