用BCP导出数据时,如何解决中文字符乱码的情况

云中客 2007-06-04 10:19:33
利用BCP工具将表内容导出时,中文字符全部变成了?,请问如何解决这个问题

操作语句如下:

create table ##jh(re nvarchar(4000))
insert ##jh
Select top 10 cClassID + ' ' + cClassName From EC_Class
exec master..xp_cmdshell 'bcp ##jh out "C:\A.text" /P"" -CACP -c '

drop table ##jh

其中EC_Class为班级表
...全文
1891 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
postform999 2007-06-11
  • 打赏
  • 举报
回复
mark~
gd4134 2007-06-05
  • 打赏
  • 举报
回复
我查了写网页,没有说可以的。。
sql自身的编码就应该是Unicode。

如果真的要使用UTF-8那只有使用外部程序来实现。~~
云中客 2007-06-05
  • 打赏
  • 举报
回复
其实是帮朋友问的,他是定期要把数据生成为XML文件,然后把XML传给某人
所以格式都要统一的!
云中客 2007-06-04
  • 打赏
  • 举报
回复
也就是这个例子,在使用阿牛方法,可以显示中文字符,但是打开XML文件时会报错

而我使用 exec master..xp_cmdshell 'bcp ##jh out "C:\test.XML" /P"" -CACP -c' ,XML打开正常,但中文字符显示为?
云中客 2007-06-04
  • 打赏
  • 举报
回复
谢谢阿牛的回答
其实我是想把数据以UTF-8的格式导出文件,主要是用在XML
create table ##jh(re nvarchar(4000))
insert ##jh
select re='<?xml version="1.0" encoding="utf-8"?>'
union all select '<root startDate="2005-04-09" endDate="2005-04-18">'
union all select '<table name="dynmmon_stock">'
union all
select top 5 space(4)+'<record>
'+space(8)+'<field name="cGradeID" type="string">'+cGradeID+'</field>
'+space(8)+'<field name="cClassID" type="string">'+cClassID+'</field>
'+space(8)+'<field name="cClassName" type="string">'+rtrim(cClassName)+'</field>
'+space(8)+'</record>'
FROM tempdb..test
union all select '</table>'
union all select '</root>'
exec master..xp_cmdshell 'bcp ##jh out "C:\test.XML" /P"" -CACP -c -w'
drop table ##jh
gd4134 2007-06-04
  • 打赏
  • 举报
回复
create table ##jh(re nvarchar(4000))
insert ##jh
Select top 10 cClassID + ' ' + cClassName From EC_Class
exec master..xp_cmdshell 'bcp ##jh out "C:\A.text" /P"" -CACP -c -w'

drop table ##jh

Performs the bulk copy operation using Unicode characters. This option does not prompt for each field; it uses nchar as the storage type, no prefixes, \t (tab character) as the field separator, and \n (newline character) as the row terminator. This option cannot be used with SQL Server 6.5 or earlier versions.
gd4134 2007-06-04
  • 打赏
  • 举报
回复
create table ##jh(re nvarchar(4000))
insert ##jh
Select top 10 cClassID + ' ' + cClassName From EC_Class
exec master..xp_cmdshell 'bcp ##jh out "C:\A.text" /P"" -CACP -c -N'

drop table ##jh
云中客 2007-06-04
  • 打赏
  • 举报
回复
budong0000,你的方法也不起作用
budong0000 2007-06-04
  • 打赏
  • 举报
回复
没用过,先将nvarchar转化为varchar试试
云中客 2007-06-04
  • 打赏
  • 举报
回复
子陌,你的意思应该如何来写?
子陌红尘 2007-06-04
  • 打赏
  • 举报
回复
默认情况下,bcp 实用工具以交互模式运行,并向 Microsoft SQL Server和用户查询指定数据格式所需的信息。然而,当使用 -n、-c、-w 或 -N 开关时,bcp 不按列查询有关 SQL Server 表的信息,而是使用指定的默认格式读取或写入数据。

gd4134 2007-06-04
  • 打赏
  • 举报
回复
暂时没有找到方法。。。估计有点困难,,
为什么非要用呢?做多语言?
云中客 2007-06-04
  • 打赏
  • 举报
回复
倒是可以,不过如果我一定要用encoding="utf-8"
是不是说就无法实现了呢
gd4134 2007-06-04
  • 打赏
  • 举报
回复
可以了吗?
文件编码的问题。-w的编码格式是unicode,所以不能强制编码。
或者把xml编码格式修改也可以 encoding="Unicode"。试试吧。。
云中客 2007-06-04
  • 打赏
  • 举报
回复
不过,阿牛,能说下为什么
云中客 2007-06-04
  • 打赏
  • 举报
回复
好的,谢谢

我试下
gd4134 2007-06-04
  • 打赏
  • 举报
回复
create table ##jh(re nvarchar(4000))
insert ##jh
select re='<?xml version="1.0" ?>'
union all select '<root startDate="2005-04-09" endDate="2005-04-18">'
union all select '<table name="dynmmon_stock">'
union all
select top 5 space(4)+'<record>
'+space(8)+'<field name="cGradeID" type="string">'+b1+'</field>
'+space(8)+'<field name="cClassID" type="string">'+b2+'</field>
'+space(8)+'</record>'
FROM t2
union all select '</table>'
union all select '</root>'
exec master..xp_cmdshell 'bcp ##jh out "C:\test.XML" /P"" -T -CACP -w'
drop table ##jh

你把select re='<?xml version="1.0" encoding="utf-8"?>'-> select re='<?xml version="1.0" ?>'试试,
mgan 2007-06-04
  • 打赏
  • 举报
回复

云中客 2007-06-04
  • 打赏
  • 举报
回复
如果用IE打开时就会提示错误:

不支持从当前编码到指定编码的切换。处理资源 'file:///C:/test.XML' 时出错。第 1 行,位置: 41

<?xml version="1.0" encoding="utf-8"?>

gd4134 2007-06-04
  • 打赏
  • 举报
回复
create table ##jh(re nvarchar(4000))
insert ##jh
select re='<?xml version="1.0" encoding="utf-8"?>'
union all select '<root startDate="2005-04-09" endDate="2005-04-18">'
union all select '<table name="dynmmon_stock">'
union all
select top 5 space(4)+'<record>
'+space(8)+'<field name="cGradeID" type="string">'+b1+'</field>
'+space(8)+'<field name="cClassID" type="string">'+b2+'</field>
'+space(8)+'</record>'
FROM t2
union all select '</table>'
union all select '</root>'
exec master..xp_cmdshell 'bcp ##jh out "C:\test.XML" /P"" -T -CACP -w'
drop table ##jh

我写的例子---没有问题~~
加载更多回复(1)

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧