无法使用 BCP 实用程序和 w 开关导入数据

Unable to Import data using BCP utility and w switch

我有一个制表符分隔的文件,它有 unicode 字符并以 LF 作为行尾。当我尝试使用 bcp 实用程序和 -c 开关导入此文件时,它加载到 table,但是,字符不正确。当我尝试使用 -w 开关时,它无法加载并出现以下错误。

[Microsoft][SQL 服务器的 ODBC 驱动程序 17]BCP 数据文件中遇到意外的 EOF

以下是文件中的文字

ialgcd  ianvmn  sourceVersion
PT  Português   2021-06-W24
SP  español 2021-06-W24
EG  English 2021-06-W24
FR  Français    2021-06-W24
GE  Deutsch 2021-06-W24
RU  Русский 2021-06-W24
PB  Português(Brazil)   2021-06-W24
KR  한국어 2021-06-W24
CH  中文  2021-06-W24

如果我以下面的方式使用 -c 开关,它加载时不会出错。但是字符不正确

bcp TableName1 in DelimitedFile1.txt -c -T -S Server01 -q -t \t -r 0x0A -F2

如果我使用 -w 开关,它不会加载任何数据并抛出错误

bcp TableName1 in DelimitedFile1.txt -w -T -S Server01 -q -t \t -r 0x0A -F2

我尝试了行终止符和字段终止符的所有不同类型的组合,还尝试使用 -N 开关,还尝试使用格式文件,但没有任何效果。

我尝试使用的格式文件是

14.0
3
1       SQLNCHAR            2       510     "\t"         1     ialgcd                         SQL_Latin1_General_CP1_CI_AS
2       SQLNCHAR            2       510     "\t"         2     ianvmn                         SQL_Latin1_General_CP1_CI_AS
3       SQLNCHAR            2       510     "0x0A"       3     sourceVersion                  SQL_Latin1_General_CP1_CI_AS

我不确定为什么它适用于 -c 开关而不适用于 -w 开关。文件开头是否需要 BOM 字符?

我找到了这个问题的解决方案。 -w 开关适用于 Unicode 字符,但如果您的文件是 UTF-8 编码的,那么您必须使用 -C(大写 C)和代码页码,因此对于 UT-8 它将是 65001 以及 -c 开关(小写 c)

所以命令看起来像

bcp TableName1 in DelimitedFile1.txt -c -C 65001 -T -S Server01 -q -t \t -r 0x0A -F2