web-dev-qa-db-ja.com

BULK INSERT後に特殊文字が正しく表示されない

BULK INSERTを使用してCSVファイルをインポートしています。 CSVファイルの列の1つに、分数を含むいくつかの値が含まれています(例:1m½f)。

値は表示目的でのみ使用されるため、分数に対して数学的演算を実行する必要はないため、列をnvarcharとして設定しました。 BULK INSERTは機能しますが、SQL内のレコードを表示すると、小数部がセント記号(¢)に置き換えられているため、表示されるテキストは1m¢fです。

これがなぜ起こっているのか、そして問題を解決する方法についての考えを理解するのに興味があります。 BULK INSERTコマンドは次のとおりです。

BULK INSERT dbo.temp FROM 'C:\Temp\file.csv' 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' );
24
MrMatt

文字列データをWindowsコードページ1252からSQL Serverコードページに変換するBULK INSERTを使用してCODEPAGE = 'ACP'を実行する必要があります。

BULK INSERT dbo.temp FROM 'C:\Temp\file.csv' 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', CODEPAGE = 'ACP');

SQL Serverの十分に新しいバージョンでUTF-8データを取り込む場合:

[...] , CODEPAGE = '65001');

DATAFILETYPE = 'char|native|widechar|widenative'を指定する必要がある場合もあります。

45
Aaron Bertrand