我使用BCP从一个CSV文件,SQL Azure的批量上传数据(因为不支持BULK INSERT)。运行此命令并上载行:
bcp [resource].dbo.TableName in C:\data.csv -t "," -r "0x0a" -c -U bcpuser@resource -S tcp:resource.database.windows.net
但是data.csv是UTF8编码,包含非ASCII字符串。这些受损。我试着改变-c选项-w:
bcp [resource].dbo.TableName in C:\data.csv -t "," -r "0x0a" -w -U bcpuser@resource -S tcp:resource.database.windows.net
但后来我得到“0行复制”。
我在做什么错了,我怎么批量使用BCP插入Unicode字符?
但是data.csv是UTF8编码
的UTF-8编码是首要的问题。使用-w
不会因为在微软的土地帮助,术语“统一”几乎总是指的是UTF-16小字节序。
该解决方案将取决于哪BCP的版本使用的是如在最新的版本(13.0 / 2016)的溶液中加入一个选项:
-w
开关。
我得到这个工作编码文件“UCS-2 LE BOM”在记事本++,而同样的导入文件使用-c
开关故障。-c -C 65001
到命令行。 -C
是“代码页”,而65001是UTF-8的代码页。在MSDN页面bcp Utility状态(在-C
开关的说明):
第13版(SQL服务器2016)之前的版本不支持代码页65001(UTF-8编码)。以13开头的版本可以导入UTF-8编码早期版本的SQL Server。
UPDATE
为支持UTF-8 /代码65001页通过SP2添加到SQL Server 2014年,因为这Microsoft知识库文章中指出:
从所罗门的回答让我在我使用Unicode和SQL Server 2014年的奋斗,我想在这里分享我的关于Unicode的经验。我希望这有助于旁边的人谁从Unicode问题BCP受到影响。
我有一个很难搞清楚的SQL Server 2014的UTF和Unicode我使用PowerShell中使用BCP到SQL Server 2014 SP2数据库上传。我的文件是在荷兰,UTF-8无BOM。我用PowerShell来的文件转换成微软的统一:
Get-ChildItem "C:\Documents\ProjectA" -filter *.CSV |
ForEach-Object {
$path = $_.basename + '.unicode.CSV'
get-content $_ | Set-Content -Encoding Unicode -path $path
}
然后我用BCP无格式文件:
Get-ChildItem "C:\Documents\ProjectA" -filter *.unicode.CSV |
ForEach-Object {
try { $output = bcp ProjectA.dbo.auditlog in $_.FullName -w "-t," -T -F2
if ($LASTEXITCODE)
{ throw $output
}
catch
{ $Output >> C:\Documents\ProjectA\BCPCommandFailed$(get-date -f yyyy-MM-dd).log
}
}
转换成Unicode导致文件大小加倍例如从11,630KB为23,259KB。模板文件的XML或非XML是否没有工作。