mtm*_*ald 4 sql-server unicode bulkinsert bcp azure-sql-database
我正在使用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
Run Code Online (Sandbox Code Playgroud)
但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
Run Code Online (Sandbox Code Playgroud)
但后来我得到'0行复制'.
我做错了什么以及如何使用BCP批量插入Unicode字符?
Sol*_*zky 10
但data.csv是UTF8编码的
UTF-8编码是主要问题.使用-w无济于事,因为在Microsoft-land中,术语"Unicode"几乎总是指UTF-16 Little Endian.
解决方案将取决于您在最新版本(13.0/2016)中添加了哪个版本的BCP作为选项:
如果您在SQL Server 2016(版本13.0)之前使用SQL Server附带的BCP,那么您需要将csv文件转换为UTF-16 Little Endian(LE),因为这是Windows/SQL Server/.NET对所有人使用的字符串.并使用-w开关.
我在Notepad ++中将此文件编码为"UCS-2 LE BOM",而使用该-c开关的同一导入文件失败.
如果您使用的是SQL Server 2016(版本13.0)或更新版本附带的BCP,则只需添加-c -C 65001到命令行即可.-C用于"代码页",65001是UTF-8的代码页.
bcp实用程序的MSDN页面状态(在-C交换机的说明中):
版本13之前的版本(SQL Server 2016)不支持代码页65001(UTF-8编码).以13开头的版本可以将UTF-8编码导入到早期版本的SQL Server.
UPDATE
通过SP2向SQL Server 2014添加了对UTF-8 /代码页65001的支持,如此Microsoft知识库文章中所述:
SQL Server 2014 SP2中的BCP实用程序和BULK INSERT Transact-SQL命令的UTF-8编码支持
| 归档时间: |
|
| 查看次数: |
2167 次 |
| 最近记录: |