MSSQL 2012使用BCP导出UTF-8格式CSV文件的解决方案咨询
解决SQL Server 2012用BCP导出UTF-8 CSV的问题
你碰到的这个报错完全是版本限制导致的——SQL Server 2012和配套的SQL Server Native Client 11.0确实不支持直接通过BCP使用65001(UTF-8)代码页,这个支持是从SQL Server 2016才正式加入的。不过不用慌,我们有几个靠谱的替代方案能帮你导出UTF-8格式的CSV文件:
方案一:先导出为UTF-16,再转码为UTF-8
BCP在SQL Server 2012里支持UTF-16(代码页1200),我们可以先导出成Unicode格式的文件,再用系统自带的工具转成UTF-8:
- 用BCP导出UTF-16的CSV:
bcp YourDatabase.dbo.YourTable out "C:\temp\unicode_output.csv" -S YourServerName -U YourUsername -P YourPassword -w -t "," -r "\n"
参数说明:
-w:指定用Unicode(UTF-16)格式导出-t ",":设置字段分隔符为逗号-r "\n":设置行分隔符为换行符
- 用PowerShell转码为UTF-8:
打开PowerShell执行以下命令,就能把UTF-16文件转成UTF-8:
Get-Content "C:\temp\unicode_output.csv" -Encoding Unicode | Set-Content "C:\temp\utf8_output.csv" -Encoding UTF8
这个方法不需要额外安装工具,Windows系统自带PowerShell,操作起来很方便。
方案二:用SSIS(SQL Server Integration Services)导出
SQL Server 2012的SSIS支持直接导出UTF-8格式的文件,步骤如下:
- 打开SQL Server Data Tools(SSDT)(要选和SQL Server 2012兼容的版本,比如SSDT 2012或2013)
- 新建一个Integration Services项目,添加数据流任务
- 在数据流里拖入OLE DB源,连接到你的SQL Server 2012数据库,选择要导出的表
- 拖入平面文件目标,新建平面文件连接:
- 设置文件保存路径,格式选择“分隔符”(对应CSV)
- 在“常规”选项卡的“编码”下拉菜单里选择“UTF-8”
- 配置字段分隔符为逗号,确认行分隔符设置正确
- 完成字段映射后,运行SSIS包就能得到UTF-8格式的CSV文件了
方案三:用T-SQL生成文本后转码(可选)
如果不想用BCP或SSIS,也可以用T-SQL拼接CSV内容,然后导出到本地文件,再转码。比如用xp_cmdshell配合bcp或者直接生成文本,但这个方法需要开启xp_cmdshell(默认禁用),而且处理大量数据效率不如前两个方案,适合小批量数据导出。
注意事项
- 转码前建议先导出小批量数据测试,确保国际字符没有乱码或丢失
- 如果使用SSIS,要确认SSDT版本和SQL Server 2012兼容,避免出现兼容性问题
内容的提问来源于stack exchange,提问作者Yehuda
相关产品推荐
相关产品推荐

