48 votes

Pourquoi Mercurial pense-t-il que mes fichiers SQL sont binaires?

Je viens de script de mon stockée SQL Server procs, les définitions de table, etc à l'aide de SQL Server Management Studio, et a essayé de les ajouter à mon Mercurial référentiel de contrôle source. Ils ont été ajoutés, mais maintenant quand je l'ai changer et diff, Mercurial appelle "les fichiers binaires" et de ne pas me donner un bon de différences unifiées.

Je pensais que le codage peut être un problème, alors j'ai essayé de régénérer les scripts et la spécification ANSI pour le fichier texte de sortie, mais j'obtiens le même comportement. Je peux les voir très bien dans le bloc-notes, sans bizarres personnages qui apparaissent. Pourquoi Mercurial pense que ces fichiers sont binaires?

Sinon, si quelqu'un peut me recommander un bon outil de script base de données SQL Server peut ne pas causer ce problème, qui pourrait fonctionner, trop.

39voto

Darryl Peterson Points 1679

J'ai rencontré ce problème parce que SQL Server Management Studio enregistre les fichiers au format Unicode. Les deux premiers octets (la plupart du temps) d'un fichier texte Unicode définir l'encodage. La plupart des nouveaux éditeurs de texte (par exemple Notepad) gérer cela de manière transparente.

Les deux premiers octets sont probablement là où est ton problème. Elles peuvent ressembler à ÿþ. Ou FF FE dans l'hex.

Sur le bouton "Enregistrer" sur la boîte de dialogue Enregistrer une liste de sélection. Choisissez "Enregistrer avec le Codage..." et sélectionnez "US-ASCII-Codepage20127". Je crois que ce paramètre est collant et restera pour de futurs enregistrements.

4voto

Matthew Flaschen Points 131723

Selon la documentation , il est considéré comme binaire ssi le fichier contient des octets nuls. Les fichiers SQL ne devraient pas avoir d'octets nuls, je vérifierais donc cela en premier (essayez de regarder dans un éditeur hexadécimal). Je suppose que vous savez que vous pouvez forcer diff à le traiter comme du texte

3voto

Ry4an Points 56453

Andrew est droit; c'est un octet NUL quelque part (j'imagine être une Marque d'Ordre des Octets au début inséré par un impoli d'outils de l'éditeur). Ne vous inquiétez pas à ce sujet que, contrairement à SVN ou CVS Mercurial ne gère pas les binaires ou texte différemment. Il affiche les différentes lorsque vous ne hg log", mais ils ne sont pas manipulés à tous différemment.

Prochaine mercurial communiqués cas particulier des Nomenclatures et ne les laissez pas déclencher "l'utilisateur n'a probablement pas envie de voir une diff de ce sur console" de comportement.

2voto

themis Points 772

Je me suis heurté à cela lors de l'édition d'un fichier de procédures stockées à partir de SQL Server sous Linux et de l'utilisation de git. Git pensait qu'il s'agissait d'un fichier binaire, car le fichier de SQL Server était UTF-16 et contenait donc des NUL. Mon correctif pour cela était emacs, qui vous permet de changer le codage en UTF-8.

0voto

misterjaytee Points 328

Je sais qu'il est un peu tard, mais j'ai mis au point un script permettant de sauvegarder par lots les fichiers * .sql au format UTF-8.

La réponse complète est publiée dans un autre fil sur StackOverflow, je vais donc poster le lien ici - http://stackoverflow.com/a/9743360/336079 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X