【疑问】我在SQL SERVER2005建立连接服务器去查询DB2的数据,但是查询出来的数据,中文居然不显示,大家能否给个解决的思路?

aerfusi 2009-04-01 11:42:02
我在SQL SERVER2005建立连接服务器去查询DB2的数据,然后执行SQL语句:

select * from openquery(db2,'select * from XXX.XXX.XXX');

结果查询出来的数据,中文居然显示不出来,而数字和英文是正常显示的。

奇怪的是,我在SQL SERVER2000上建立连接服务器,连接查询DB2的数据,同样的SQL语句,查询出的数据,中文是可以正常显示的。有点棘手。

大家能否给个解决的思路?
...全文
301 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
aerfusi 2009-04-15
  • 打赏
  • 举报
回复
谢谢,各位,问题暂时用另外一种方式解决了。
问题可能是创建链接服务器所设置的驱动不支持吧,
我在管理工具那里创建了一个DB2的数据源后(需要在同一台机器上建DB2数据库或DB2的客户端),通过在链接服务器那创建了一个ODBC方式驱动,然后就能显示中文了。
虽然用另外的方式解决了,但问题的原因还是不清晰。
待专家解答。。。
aerfusi 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zengpengalready 的回复:]
你需要去查看一下DB2数据库,那些乱码的字段在DB2应该是被定义为非unicode列,会和DB2数据库的默认编码有关,请核对该编码格式是否和目前你使用的sql2005是否一致,如果不一致,你可以将其转为 unicode编码 然后加载过来存储为unicode字符,应该就可以了,关于非unicode编码
比如 你的机器使用sql2005默认编码 应该是cp936,这个时候 例如 "中"varchar类型 存储在数据库中,应该是0X232d(只是举个例子),转为unicode编码是不一样…
[/Quote]

谢谢提供,不过,这个不是中文显示成乱码的问题,是中文不显示,感觉很怪。
Teng_s2000 2009-04-03
  • 打赏
  • 举报
回复
SQL如果中文版的默认肯定就是支持中文的,不存在中文乱码的问题
如果是英文的肯定查看一下
zengpengalready 2009-04-03
  • 打赏
  • 举报
回复
应该是代码页 ,赫赫 说错了
zengpengalready 2009-04-03
  • 打赏
  • 举报
回复
你需要去查看一下DB2数据库,那些乱码的字段在DB2应该是被定义为非unicode列,会和DB2数据库的默认编码有关,请核对该编码格式是否和目前你使用的sql2005是否一致,如果不一致,你可以将其转为 unicode编码 然后加载过来存储为unicode字符,应该就可以了,关于非unicode编码
比如 你的机器使用sql2005默认编码 应该是cp936,这个时候 例如 "中"varchar类型 存储在数据库中,应该是0X232d(只是举个例子),转为unicode编码是不一样的 可能是 0xaada,但是各个机器的unicode码值是一样的,所以可以做为标准的编码格式传递,不知道我说清楚没?
htl258_Tony 2009-04-02
  • 打赏
  • 举报
回复
第一种办法:先选中出错的数据库→选中以后右键点击属性会弹出数据库属性 对话框→选中数据库属性对话框中的选项→把选项中的排序规则设置成:Chinese_PRC_90_CI_AS→最后点击确定即可。
(注意:在选择数据库属性的时候必须确保你所修改的数据库未被使用才可以修改否则会失败的)

第二种办法:首先打开你的sql查询分析器(新建查询),然后输入以下代码执行即 可:ALTER DATABASE 数据库名 COLLATE Chinese_PRC_90_CI_AS
例如:
ALTER DATABASE 9NPC COLLATE Chinese_PRC_CI_AIALTER DATABASE AutoUpgrade COLLATE Chinese_PRC_CI_AI

解析原因:出现以上情况主要是因为数据库属性的排序规则设置不正确,在Microsoft SQL Server 2005 中,字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存储和比较字符所使用的规则。
aerfusi 2009-04-02
  • 打赏
  • 举报
回复
再顶一下
aerfusi 2009-04-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 htl258 的回复:]
第一种办法:先选中出错的数据库→选中以后右键点击属性会弹出数据库属性 对话框→选中数据库属性对话框中的选项→把选项中的排序规则设置成:Chinese_PRC_90_CI_AS→最后点击确定即可。
(注意:在选择数据库属性的时候必须确保你所修改的数据库未被使用才可以修改否则会失败的)

第二种办法:首先打开你的sql查询分析器(新建查询),然后输入以下代码执行即 可:ALTER DATABASE 数据库名 COLLATE Chinese_PRC_90_CI_AS

[/Quote]

谢谢楼上,我这边原来数据库的排序规则是:Chinese_PRC_CI_AS 但是改成Chinese_PRC_90_CI_AS后,还是不行。
aerfusi 2009-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 knifewei 的回复:]
数据库的字符编码设为UNICODE才能显示中文
看看是不是字符编码的原因
[/Quote]

我觉得应该不是数据库的字符集的原因
因为我在这个SQL SERVER 2005也建了一个sql server 2000的连接,查询这个2000表里的数据时,中文是可以显示的。
sdhdy 2009-04-01
  • 打赏
  • 举报
回复
你比较一下这两个数据库服务器的默认语言。
knifewei 2009-04-01
  • 打赏
  • 举报
回复
数据库的字符编码设为UNICODE才能显示中文
看看是不是字符编码的原因

22,211

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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