Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment écrire des caractères UTF-8 à l'aide d'une insertion en bloc dans SQL Server ?

Je suis venu ici avant de chercher une solution pour l'insertion en bloc de caractères spéciaux. Je n'aimais pas la solution de contournement avec UTF-16 (qui doublerait la taille du fichier csv). J'ai découvert que vous POUVEZ définitivement et c'est très facile, vous n' t besoin d'un fichier de format. Cette réponse s'adresse à d'autres personnes qui recherchent la même chose, car elle ne semble pas bien documentée nulle part, et je pense que c'est un problème très courant pour les non-anglophones. La solution est la suivante :ajoutez simplement CODEPAGE='65001' à l'intérieur de l'instruction with de l'insertion en bloc. (65001=numéro de page de code pour UTF-8). Peut ne pas fonctionner pour tous les caractères unicode comme suggéré par Michael O, mais au moins cela fonctionne parfaitement pour le latin étendu, le grec et le cyrillique, probablement beaucoup d'autres aussi.

Remarque :La documentation MSDN indique que l'utf-8 n'est pas pris en charge, ne le croyez pas, pour moi, cela fonctionne parfaitement dans SQL Server 2008, mais je n'ai pas essayé d'autres versions.

par exemple :

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

Si tous vos caractères spéciaux sont en 160-255 (iso-8859-1 ou windows-1252), vous pouvez aussi utiliser :

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