The extension alone isn't enough to GitHub to see if it is a text file.
So it has to look at its content.
And as mentioned in "Why does Git treat this text file as a binary file?", its content might not include enough ascii character to guess it is text file.
You can use a .gitattributes file to explicitly specify a .sql
should be a text, not a binary.
*.sql diff
Update 2018: as I mention in "Utf-8 encoding not working on utf-8 encoded document", Git 2.18 .gitattributes has a new working-tree-encoding
attribute.
So, as shown in Rusi's answer:
*.sql text working-tree-encoding=UTF-16LE eol=CRLF
As kostix adds in the comments:
if these files are generated by the Microsoft SQL Management Studio (or whatever it's called in the version of MS SQL Server's management tools you're using), the files it saves are encoded in UCS-2 (or UTF-16) -- a two-byte encoding, which is indeed not text in the eyes of Git
You can see an example in "Git says “Binary files a… and b… differ
” on for *.reg
files"
As mentioned in "Set file as non-binary in git":
"Why is Git marking my file as binary?" The answer is because it's seeing a NUL (0) byte somewhere within the first 8000 characters of the file.
Typically, that happens because the file is being saved as something other than UTF-8. So, it's likely being saved as UCS-2, UCS-4, UTF-16, or UTF-32. All of those have embedded NUL characters when using ASCII characters
As Neo mentions in the comments (and in Why does Git treat this text file as a binary file?):
You can change the encoding of a saved file in SSMS to UTF-8 by selecting encoding 'UTF-8 with signature' from the 'Advanced Save Options' menu item in the File menu.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…