Der Export von Daten mit SQLCL funktioniert ähnlich wie beim Großvater SQLPlus.
Leider bietet SQLCL keine Option mit welcher Kodierung die Ausgabe erfolgt. Das lässt sich mit JAVA_TOOL_OPTIONS einstellen. Folgende Befehle in der Kommandozeile (oder einem CMD-Script) bringen SQLCL einmalig dazu, jede Ausgabe ins Filesystem mit UTF8 zu schreiben :
set JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF-8'
Leider ergibt das aber nur UTF8 ohne BOM/Byte Order Mark.
Im Default kann SQLCL oder die CMD nun keine BOM erzeugen. Dabei handelt es sich aber nur um fest kodierte Bytes, die der Datei vorran gestellt werden: EF BB BF
Der Trick in der CMD ist, eine Datei – die nur diese Bytes enthält – dem eigentlichen Export voran zu „stellen“:
copy utf8bom.txt+export.csv final_export.csv /B
Die Datei utf8bom.txt steht zum Download bereit. Das Flag „/B“ ist wichtig, bringt es doch den copy-Befehl dazu, die Zeichen binär zu kopieren.
Darüber hinaus gibt es auch eine Variante mit der Powershell, die ich in einem der nächsten Beiträge erörtern möchte.