Benutzer mit den meisten Antworten
Codierung von Text

Frage
-
Hallo,
ich lese eine kleine ASCII-Datei über einen Bulk-Load mit einer gespeicherten Prozedur in ein Textfeld (nvarchar(max)) ein.
Problem ist, dass der Text nach dem INSERT völlig verhunzt ist. Ursprünglich ist die Datei ANSI-codiert und enthält deutschen bzw. englischen Text mit Zahlen. In der Tabelle auf dem Server (SQLExpress 2014) landet es dann als Kauderwelsch chinesischer Schriftzeichen.
Lade ich die Datei von Platte in einen Texteditor (Notepad++), dann sieht alles ganz normal aus. Notepad++ sagt als Codierung ANSI und alles ist für mich lesbar.
Es ist so, dass wenn ich die Datei "ziehe", also der Server selbst die Datei von einer lokalen Platte lädt, dass dann die Codierung durcheinander gerät. Wenn ich die Datei drücke, das heißt, ein Client lädt die Datei als Ganzes über eine Netzlaufwerkverbindung in eine Textvariable und schiebt dann von dort über ein INSERT INTO die Datei in die Tabelle, ist die Codierung nicht verändert, die Daten sind einwandfrei lesbar.
Hat jemand einen Tipp, an welcher Schraube ich drehen muss, dass beim Bulk-Load die Codierung des Textes nicht geändert wird?
Gruß
H.
Antworten
-
Welchen DATAFILETYPE hast Du angegeben?
widenative Native (Datenbank-) Datentypen, außer in char-, varchar- und text-Spalten, in denen Date als Unicode gespeichert werden.Erstellen Sie die Datendatei widenative durch das Massenimportieren von Daten aus SQL Server mithilfe des Hilfsprogramms bcp.
Der Wert vom Datentyp widenative bietet eine höhere Leistung als der widechar-Wert. Falls die Datendatei erweiterte ANSI-Zeichen enthält, geben Sie widenative an.Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 4. Juni 2018 05:26
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 12. Juni 2018 13:45
-
sorry,
nicht SINGLE_BLOB sondern SINGLE_CLOB
und schon geht's!
Wie war das mit dem Wald und den Bäumen?
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 4. Juni 2018 05:26
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 12. Juni 2018 13:45
Alle Antworten
-
Welchen DATAFILETYPE hast Du angegeben?
widenative Native (Datenbank-) Datentypen, außer in char-, varchar- und text-Spalten, in denen Date als Unicode gespeichert werden.Erstellen Sie die Datendatei widenative durch das Massenimportieren von Daten aus SQL Server mithilfe des Hilfsprogramms bcp.
Der Wert vom Datentyp widenative bietet eine höhere Leistung als der widechar-Wert. Falls die Datendatei erweiterte ANSI-Zeichen enthält, geben Sie widenative an.Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 4. Juni 2018 05:26
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 12. Juni 2018 13:45
-
sorry,
nicht SINGLE_BLOB sondern SINGLE_CLOB
und schon geht's!
Wie war das mit dem Wald und den Bäumen?
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 4. Juni 2018 05:26
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 12. Juni 2018 13:45
-
Dann habe ich mich wohl falsch ausgedrückt.
NVARCHAR ist in der Speicherungsform ja Unicode, allerdings hat der Bulkinsert die Textdatei wohl ebenso als Unicode interpretiert. Dies kann dann wahlweise UCS2, UTF-16 oder eben auch UTF-8 sein.
Was die Codierungen angeht so muss man UCS2/4 und UTF-8/16 unterscheiden.
Fixe Codelänge: UCS2 = 2 (16-Bit), UCS4 = 4 Byte (32-Bit)
Variable Codelänge UTF-8 = 1-4 Byte, UTF-16 = 2 oder 4 Byte.Oracle verwendet z.B. grundsätzlich nur UTF-8 als NVARCHAR.
DB2 wahlweise UCS2 oder UCS4.Aber wie oben ja gesagt, hat durch die Definition als BLOB (Binary) der Import wohl UCS2 oder UTF16 angenommen.