Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come scrivere caratteri UTF-8 utilizzando l'inserimento in blocco in SQL Server?

Sono venuto qui prima di cercare una soluzione per l'inserimento di massa di caratteri speciali. Non mi piaceva la soluzione alternativa con UTF-16 (che raddoppierebbe le dimensioni del file CSV). Ho scoperto che puoi sicuramente CAN ed è molto facile, non lo fai non è necessario un file di formato. Questa risposta è per altre persone che cercano lo stesso, poiché non sembra essere documentato bene da nessuna parte e credo che questo sia un problema molto comune per le persone che non parlano inglese. La soluzione è:basta aggiungere CODEPAGE='65001' all'interno dell'istruzione with dell'inserto collettivo. (65001=numero codepage per UTF-8). Potrebbe non funzionare per tutti i caratteri Unicode come suggerito da Michael O, ma almeno funziona perfettamente per latino-esteso, greco e cirillico, probabilmente anche molti altri.

Nota:la documentazione MSDN dice che utf-8 non è supportato, non crederci, per me funziona perfettamente in SQL Server 2008, tuttavia non ho provato altre versioni.

es.:

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

Se tutti i tuoi caratteri speciali sono in 160-255 (iso-8859-1 o windows-1252), puoi anche usare:

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