插入使用BCP Unicode字符行

问题描述 投票:4回答:2

我使用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字符?

sql-server unicode azure-sql-database bulkinsert bcp
2个回答
10
投票

但是data.csv是UTF8编码

的UTF-8编码是首要的问题。使用-w不会因为在微软的土地帮助,术语“统一”几乎总是指的是UTF-16小字节序。

该解决方案将取决于哪BCP的版本使用的是如在最新的版本(13.0 / 2016)的溶液中加入一个选项:

  • 如果您正在使用BCP与SQL Server传来的SQL Server 2016(13.0版本),那么你需要的csv文件转换为UTF-16小端(LE)之前,因为这是在Windows / SQL服务器/ .NET使用的所有字符串。并使用-w开关。 我得到这个工作编码文件“UCS-2 LE BOM”在记事本++,而同样的导入文件使用-c开关故障。
  • 如果您使用的是与SQL Server 2016或(13.0版)新来了BCP,那么你可以简单地添加-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知识库文章中指出:

UTF-8 encoding support for the BCP utility and BULK INSERT Transact-SQL command in SQL Server 2014 SP2


1
投票

从所罗门的回答让我在我使用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是否没有工作。

© www.soinside.com 2019 - 2024. All rights reserved.