【发布时间】:2020-05-02 07:47:47
【问题描述】:
我已经为 bcp 创建了一个 .csv 文件,格式如下:
x,y,z(CR LF)
x,y,z(CR LF) etc...
我的 bcp in 命令工作如下:
bcp "{table}" in "{csv path}" -S {server} -t -T -q -w -f "{format xml file}"
使用以下格式命令和文件:
bcp "{table}" format nul -t, -T -q -S {server} -f {format file} -x
这可以正常上传,但不能正确上传重音字符。
我查看了SQL Docs,但这些示例并没有解决这个问题。
我的 .csv 是这种数据格式:
bigint, date, date, nvarchar, varchar, varchar, bigint, bigint
我是不是误会了,我应该更正格式文件、上传 IN 命令,还是两者都更正?
谢谢。
编辑: 基于MS docs 我现在已经开始手动创建如下格式文件 - 这总是会导致 Invalid field size for datatype 错误。
11.0
8
1 SQLCHAR 0 15 "," 1 fn1 Latin1_General_CI_AS
2 SQLDATE 1 3 "," 2 fn2 ""
3 SQLDATE 1 3 "," 3 fn3 ""
4 SQLNCHAR 2 510 "," 4 fn4 SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 2 50 "," 5 fn5 Latin1_General_CI_AS
6 SQLCHAR 2 40 "," 6 fn6 Latin1_General_CI_AS
7 SQLBIGINT 1 8 "," 7 fn7 ""
8 SQLBIGINT 1 8 "\r\n" 8 fn8 ""
我还将表 nchar 字段的排序规则更改为“SQL_Latin1_General_CP1_CI_AS”
【问题讨论】:
-
您需要
-C选项来告诉bcp您的文件采用什么编码。它使用的“默认代码页”不一定是您想要的。-C ACP使用 Windows-1252,适用于很多情况;-C 65001在最近的版本(2016+)中使用 UTF-8,并且是最“通用”的方法,当然,只要您也可以将 CSV 保存为 UTF-8。 -
@JeroenMostert UTF-8 CSV 需要 BOM 还是需要没有有 BOM 或者它不关心?
-
@AndrewMorton:这是一个很好的问题——我不知道答案,因为
bcp文档对此事保持沉默,我不记得上次发生了什么试过这个。 -
@jmejay 你能用编码为
UTF-16LE的数据尝试一下没有BOM 吗? (来自 Erland Sommarskog 在bcp unicode 中的回复。) -
我不认为格式文件对此有任何影响。数据库列的排序规则与输入文件编码不同——文件只有一种编码,因此不能为单个列切换它。也就是说,
bcp有更奇怪的疣,所以是的。确保您确实知道输入文件的编码是什么,首先——“重音字符出错”本身无法告诉您这一点。在记事本中,您可以使用“文件 -> 另存为”中的“编码”下拉菜单来指定。
标签: sql-server tsql command-line sql-server-2012 bcp