Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como escrever caracteres UTF-8 usando inserção em massa no SQL Server?


Eu vim aqui antes de procurar uma solução para inserir caracteres especiais em massa. Não gostei da solução alternativa com UTF-16 (que dobraria o tamanho do arquivo csv). Descobri que você definitivamente PODE e é muito fácil, você não t precisa de um arquivo de formato. Esta resposta é para outras pessoas que estão procurando o mesmo, já que não parece estar bem documentado em nenhum lugar, e acredito que esse seja um problema muito comum para pessoas que não falam inglês. A solução é:basta adicionar CODEPAGE='65001' dentro da instrução with da inserção em massa. (65001=número da página de código para UTF-8). Pode não funcionar para todos os caracteres unicode como sugerido por Michael O, mas pelo menos funciona perfeitamente para latim-extended, grego e cirílico, provavelmente muitos outros também.

Nota:A documentação do MSDN diz que utf-8 não é suportado, não acredite, para mim isso funciona perfeitamente no SQL Server 2008, mas não tentei outras versões.

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

Se todos os seus caracteres especiais estiverem em 160-255 (iso-8859-1 ou windows-1252), você também poderá usar:
BULK INSERT #myTempTable 
FROM  'D:\somefolder\myCSV.txt'+
WITH 
    ( 
        CODEPAGE = 'ACP',
        FIELDTERMINATOR = '|',
        ROWTERMINATOR ='\n'
    );