sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo escribir caracteres UTF-8 usando inserción masiva en SQL Server?

Vine aquí antes de buscar una solución para la inserción masiva de caracteres especiales. No me gustó la solución con UTF-16 (que duplicaría el tamaño del archivo csv). Descubrí que definitivamente PUEDES y es muy fácil, no No necesito un archivo de formato. Esta respuesta es para otras personas que buscan lo mismo, ya que no parece estar bien documentado en ninguna parte, y creo que este es un problema muy común para las personas que no hablan inglés. La solución es:simplemente agregue CODEPAGE='65001' dentro de la instrucción with de la inserción masiva. (65001=número de página de códigos para UTF-8). Puede que no funcione para todos los caracteres Unicode como sugiere Michael O, pero al menos funciona perfecto para caracteres latinos extendidos, griegos y cirílicos, y probablemente muchos otros también.

Nota:la documentación de MSDN dice que utf-8 no es compatible, no lo crea, para mí esto funciona perfectamente en el servidor SQL 2008, sin embargo, no probé otras versiones.

por ejemplo:

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

Si todos sus caracteres especiales están en 160-255 (iso-8859-1 o windows-1252), también podría usar:

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