Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie schreibe ich UTF-8-Zeichen mit Masseneinfügung in SQL Server?

Ich kam hierher, bevor ich nach einer Lösung für das Masseneinfügen von Sonderzeichen suchte. Mir gefiel die Problemumgehung mit UTF-16 nicht (das würde die Größe der CSV-Datei verdoppeln). Ich fand heraus, dass Sie es definitiv KÖNNEN und es sehr einfach ist, Sie nicht Eine Formatdatei ist nicht erforderlich. Diese Antwort ist für andere Personen gedacht, die nach derselben suchen, da sie anscheinend nirgendwo gut dokumentiert ist, und ich glaube, dass dies ein sehr häufiges Problem für nicht englischsprachige Personen ist. Die Lösung ist:Fügen Sie einfach CODEPAGE='65001' in die with-Anweisung der Masseneinfügung ein. (65001=Codepage-Nummer für UTF-8). Funktioniert möglicherweise nicht für alle Unicode-Zeichen, wie von Michael O vorgeschlagen, aber zumindest funktioniert es perfekt für Latin-Extended, Griechisch und Kyrillisch, wahrscheinlich auch für viele andere.

Hinweis:Die MSDN-Dokumentation besagt, dass utf-8 nicht unterstützt wird, glauben Sie es nicht, für mich funktioniert dies perfekt in SQL Server 2008, habe jedoch keine anderen Versionen ausprobiert.

zB:

BULK INSERT #myTempTable 
FROM  'D:\somefolder\myCSV.txt'+
WITH 
    ( 
        CODEPAGE = '65001',
        FIELDTERMINATOR = '|',
        ROWTERMINATOR ='\n'
    );

Wenn alle Ihre Sonderzeichen in 160-255 (iso-8859-1 oder windows-1252) sind, könnten Sie auch verwenden:

BULK INSERT #myTempTable 
FROM  'D:\somefolder\myCSV.txt'+
WITH 
    ( 
        CODEPAGE = 'ACP',
        FIELDTERMINATOR = '|',
        ROWTERMINATOR ='\n'
    );