2017-10-03 2 views
0

Meine SQL-Datei zum Generieren von Skripts einschließlich meiner CREATE-Befehle für verschiedene Ansichten und Tabellen ist zu groß für einen normalen Notepad-Editor. Ich verwende vim. Jedes Zeichen hat jedoch einen ^@ dazwischen. So CREATE TABLE sieht so aus:Verwendung von vim unter Windows zum Analysieren einer SQL-Datei

^@C^@R^@E^@A^@T^@E^@ ^@T^@A^@B^@L^@E 

Ist das normal? Grundsätzlich gibt es nur wenige CREATE Skripte, die ich wirklich in dieser Datei haben möchte. Insbesondere suche ich nach jeder Zeile, die [dbo].[v_agent enthält. Ich verstehe grep Befehle, aber ich sitze auf den Befehl zu laufen warten und möchte wissen, ob ich meine Zeit verschwende oder nicht.

+1

Wie haben Sie das Skript erstellt? Es gibt eine ScriptingOptions ... Option, um die Kodierung für die Ausgabe zu setzen (https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.scriptingoptions.encoding.aspx), aber ich bin es nicht Sehen Sie es in den SSMS-Optionen ausgesetzt. Mein Verdacht ist, dass die Datei UTF-16 ist und vim UTF-8 erwartet (oder interpretiert). –

+0

Ich habe Tasks -> Generate Scripts –

+1

Ich habe ein wenig Forschung und es scheint, dass dies eine langjährige Anfrage an MS (um zumindest die Benutzer die Möglichkeit, eine andere Codierung wählen). Sie könnten ein Powershell-Skript ausprobieren, in dem Sie ScriptingOptions.Encoding auf UTF-8 setzen können. Ansonsten mag ich den unten angegebenen vim-Tipp. –

Antwort

3

Moderne MS Windows-Programme und Dienstprogramme (wie SQL Server) erstellen Textdateien mit der Zeichencodierung UTF-16 LE (Little End).

Standardmäßig Unix-Dienstprogramme wie grep interpretieren solche Dateien nicht als Textdateien und behandeln sie stattdessen als Binärdateien (Byteströme).


Wenn Sie einen Unix-Emulator laufen (zum Beispiel Cygwin), das iconv Werkzeug verwendet werden, könnte dies zu einer anderen Kodierung zu konvertieren wie UTF-8, z.B.

iconv -f utf16le -t utf8 in.sql > out.sql 

Da Sie bereits festgestellt, dass Sie die Datei öffnen in Vim haben, können Sie wieder öffnen diese Vim Befehl:

:set encoding=utf8 
:e ++encoding=utf16le 

Der erste Befehl verwendet wird, um Sicher, dass Unicode-Zeichen korrekt dargestellt werden können, wenn die Datei in einen Vim-Puffer geladen wird. Dies sollte nicht notwendig sein, da die Standardcodierung normalerweise auf UTF-8 eingestellt ist.

Vim erkennt die Datei nicht automatisch als in UTF-16LE codiert, sodass der zweite Befehl die Datei zur Bearbeitung erneut öffnet; Sie müssen ihm sagen, welche Zeichenkodierung verwendet werden soll, um den Bytestrom zu interpretieren, aus dem die Datei besteht. Weitere Informationen finden Sie unter http://vim.wikia.com/wiki/Reloading_a_file_using_a_different_encoding

Jetzt, da die Datei korrekt in einen Vim-Puffer geladen wird, können Sie die Option fileencoding auf eine beliebige Zeichenkodierung setzen, mit der Sie die Datei speichern möchten.

Verwandte Themen