LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2732|回复: 3

关于在嵌入式环境下用freetds上传中文到后台乱码的问题?

[复制链接]
发表于 2006-9-20 18:06:40 | 显示全部楼层 |阅读模式
系统环境:
    前台是一个嵌入式的babylinux环境,字符集是ANSIC1968的,工具都是busybox的,应用程序是MicroWindow Nanox+FLTK,数据库是mysql;
    后台是window2000,sqlserver数据库;

    因为需要在前台读写后台的数据库,所以选择了freetds的驱动。由于嵌入式空间有限,所以基本是手动静态编译,然后拿tds的静态库,通过调用函数来实现前后台间通讯的。

    因为公司的nanox版本支持显示中文,加上编译freetds的时候加上不做字符集转换的参数(网上看的,因为后台默认是cp936,和前台的ANSIC1968不同,所以不转换),结果下载数据一切正常!
    但问题来了!因为前后台的字符集不一样,所以到时上传中文不成功!我尝试不设置客户端的字符集(看代码知道不手动设置就会调用默认的,是ISO9***的)。。。
    于是改后重试,这次终于上传成功了!!欢喜一阵,但到后台一看,中文乱码一片!!其实乱码很合理,因为比较字符集不一样。

    说了一大堆,进正题把。前后台字符集不同,但我下载的时候不转换,结果nanox也能正常显示,没什么问题;但我从mysql中select出来,然后上传到sqlserver后,他照样不转换不就行了,为什么是乱码一片呢??
    因为是嵌入式环境,所以我压根没用什么freetds中unixodbc的,是不是用上了,字符集不一样都能转换,不会乱码呢??其实我一直觉得,前后台字符集不一样是问题关键,但在我的嵌入式环境下支持中文字符集,好像有点吃不消啊?

    网上看的多是在完整的发行版本上跑freetds,所以对我启发不大;因为我的应用软件在PC上的X11模拟跑,上传下载都很正常的,用的也是那个静态库,没什么unixodbc转换什么的,所以我才觉得是不是要装个字符集,好像我PC上用的gb2312或18030之类。。。
 楼主| 发表于 2006-9-20 22:24:14 | 显示全部楼层
上网找资料的时候发现,原来字符集locale是编译glibc的时候支持的,所以我的系统不支持中文环境,应该就是glibc的问题把??
如果是,岂不是要重新编译glibc??有没有好的方法,如copy系统的字符集过来(我其实要gb2312就够了),写几个配置文件就可以的啊??
迷惑中。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-31 22:16:04 | 显示全部楼层
今晚又看了下freetds的maillist,里面有多个贴都说到关于client_charset和server_charset之间的转换问题,可惜e文能力有限,看的明表意,但还是理解不了。。。
回复 支持 反对

使用道具 举报

发表于 2008-11-17 10:43:34 | 显示全部楼层
我也遇到这样的问题,后来解决了。。。
在freetds.conf里面:
# A typical Microsoft SQL Server 2000 configuration
        host = 192.168.4.195
        port = 1433
        tds version = 8.0
加入一行:
          client charset = GB2312
就行了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表