chinalyne 发表于 2011-12-22 16:48

sybase导出数据字段过长问题

本帖最后由 chinalyne 于 2011-12-22 16:51 编辑

从Sybase中导出数据,当第三列d.Name字段过长时就会出现结尾处的乱码,哪位有过类似经历,请指导下我这新手啊!感谢~

语句和结果如下:
isql -Uiptvtj -Piptvtj10 -SIPTVTJ_SERVER -w 2000 <<! |sed '1,2d' | sed '/------/d' | sed '/affected)$/d' | sed '/^$/d'| tr -d ' ' | tr'ZZZ' ' ' | unix2dos>happy.txt
select distinct c.banner+'|'+
                  a.ID+'|'+
                  d.Name+'|'+
                  rtrim(convert(varchar,d.adddate,102))||'ZZZ'||rtrim(convert(varchar,d.adddate,108))
from a,b,c,dwhere ......

结果:
财经VIS|progc000000034963430000002213092|财闻111220多空博弈正是市场的规律-汇市争锋特别节目人民币波动讄2011.12.21   08:00:16
财经VIS|progc000000035302607000002188463|财闻111215新闻背景CPI逐月回落高通胀警报暂时解除-经济工作会议|2011.12.15   16:00:29
财经VIS|progc000000035848944000002194645|财闻111215商务部进口汽车存在倾销补贴产业受实质损害-1对美汽车|2011.12.16   16:31:28
财经VIS|progc000000037172881000002198805|财闻111217终身成就奖联想控股有限公司董事长兼总裁柳传志-CCTV緗2011.12.17   17:20:16
财经VIS|progc000000037450804000002188475|财闻111215新闻背景年底银行大打揽储战冲刺百分之75红线-经济工讄2011.12.15   16:05:19
财经VIS|progc000000038048926000002189141|财闻111215狙击人民币路径日益清晰对冲基金曲线做空中国-人民币讄2011.12.15   18:30:26
财经VIS|progc000000038960013000002198793|财闻111217内蒙古和信园蒙草抗旱绿化公司董事长王召明-CCTV经济葇2011.12.17   17:15:18
财经VIS|progc000000039073250000002213084|财闻111220多空博弈正是市场的规律-汇市争锋特别节目人民币波动讄2011.12.21   08:00:14
财经VIS|progc000000039145649000002194562|财闻111215五大外国车企受震动16款进口豪车或涨价-3对美汽车双反|2011.12.16   16:16:34
财经VIS|progc000000039588132000002188436|财闻111215新闻背景上海深圳杭州楼市打折降价频现市场反应平淡-緗2011.12.15   15:55:28
财经VIS|progc000000039638765000002198799|财闻111217年度大奖天宫一号神州八号交会对接任务团队-CCTV经济葇2011.12.17   17:15:16
财经VIS|progc000000039771067000002198802|财闻111217自主创新奖中国第一汽车集团董事长徐建一-CCTV经济人蝲2011.12.17   17:20:13
军事纪实|progc000000031623293000002212605|回看-吉林边防山江行6-漫漫风雪路上寻战友-军事纪实111219|2011.12.21   06:30:14

zhaopingzi 发表于 2011-12-23 00:31


楼主你先
select distinct c.banner+'|'+
                  a.ID+'|'+
                  d.Name+'|'+
                  rtrim(convert(varchar,d.adddate,102))||'ZZZ'||rtrim(convert(varchar,d.adddate,10)
from a,b,c,dwhere ......
看一下是否有乱码。如果没有的话,那就是你后面的shell出现了问题;
                  如果有的话,先解决SQL的问题

chinalyne 发表于 2011-12-23 16:12

谢谢二楼。单独执行sql有同样的问题啊。找不到问题所在啊。

zhaopingzi 发表于 2011-12-24 00:18


很有可能你的那个字段是定长的,在insert的时候,字段超长了,被截断了,一个汉字在截断后(两个字节,截走1个),那么这个汉字基本就变量乱码了。
所以你这个字段在库里就是乱码

chinalyne 发表于 2011-12-24 00:28

表中是正常的啊,单独查那个表的时候字段完全显示,多个表关联输出就不行了

andkylee 发表于 2011-12-24 11:07

先确定一下d.Name的长度是不是60字节?

原因是保存在字段d.Name中的内容有中半个汉字,所以导出来的时候呈现乱码了。

andkylee 发表于 2011-12-24 11:09

使用 convert(char(10),d.Name) 替换原来的d.Name。 试试。

andkylee 发表于 2011-12-24 11:18

使用 convert(char(60),d.Name) 替换原来的d.Name。 试试。
页: [1]
查看完整版本: sybase导出数据字段过长问题