我单位有两台SQL服务器,一台是商用的数据库服务器,其排序规则是Latin1_General_BIN,一台是我单位自己编写的办公室自动化的服务器,其排序规则是:Chinese_PRC_CI_AS。
如果取两个服务器的两个表关联起来,用全连接的方式,连接条件中加入collate database_default是一点问题也没有。
但是取其中一个字段的内容则出现了乱码,就是类似这样的写法,COALESCE(OA.ITEM_DESC,FS.ITEM_DESC collate Latin1_General_BIN)。ITEM_DESC在办公室自动化的服务器中字段类型是nvarchar,商用服务器的字段类型是无法更改的,这样取值的结果是,一个服务器取得值为中文,另一个服务器取得值必定是乱码。怎么改排序规则都不行,必有一个服务器的数值是乱码,我该怎么办呢?先谢谢诸位。

解决方案 »

  1.   

    --try:
    COALESCE(OA.ITEM_DESC ,FS.ITEM_DESC collate database_default)
      

  2.   

    比较笨的方法:转换成ascii,
      

  3.   

    http://blog.csdn.net/syc0616/archive/2008/12/24/3593526.aspx
      

  4.   

    我更改了三次排序规则:
    第一次:collate database_default
    第二次:collate Latin1_General_BIN
    第三次:collate Chinese_PRC_CI_AS
    都不行
      

  5.   

    我今天又试了另一种办法,就是这个ITEM_DESC的数据分两列,来源不同的数据库
    ...
    ,ISNULL(OA.ITEM_DESC,'') AS OA_ITEM_DESC,ISNULL(FS.ITEM_DSEC,'') AS FS_ITEM_DESC
    ...
    结果是,每列都不是乱码,全是显示完美的汉字。但是缺点是,每列都有些空白行,我需要把空白行变为汉字!再接再厉,合并上述两列为一列
    ...
    ,CASE WHEN OA_ITEM_DESC<>'' THEN OA_ITEM_DESC ELSE FS_ITEM_DESC END AS ITEM_DESC
    ...
    这时再运行,则出现错误提示
    『Cannot resolve collation conflict for column 2 in SELECT statement.』
    修改为以下格式:
    ...
    CASE WHEN OA_ITEM_DESC<>'' THEN OA_ITEM_DESC ELSE FS_ITEM_DESC  collate Latin1_General_BIN END ITEM_DESC
    ...
    运行没有错误了,但是,但是,本列数据还是出现了乱码,部分汉字,部分乱码看来,在一行中,来自两个不同排序规则的数据库的数据,肯定会出现乱码只能寻找其他解决办法了不知道大家是否还有解决办法
      

  6.   

    try:
    COALESCE(OA.ITEM_DESC, FS.ITEM_DESC COLLATE Chinese_PRC_CI_AS) COLLATE Chinese_PRC_CI_AS
      

  7.   

    COALESCE(OA.ITEM_DESC, FS.ITEM_DESC) COLLATE Chinese_PRC_CI_AS
      

  8.   

    我经常处理排序规则为SQL_Latin1_General_CP1_CI_AS和Chinese_PRC_CI_AS的两个数据库没发生过乱码问题
    Latin1_General_BIN排序规则数据库没碰到过
      

  9.   

    你可以直接
    select FS.ITEM_DESC COLLATE Chinese_PRC_CI_AS
    select OA.ITEM_DESC COLLATE SQL_Latin1_General_BIN
    看看是不是乱码
      

  10.   

    select FS.ITEM_DESC COLLATE Chinese_PRC_CI_AS
    sleect FS.ITEM_DESC COLLATE Latin1_General_BIN
    第一个全是乱码,第二个全不是乱码
    但是我把FS与OA的放在一列,就不行了,怎么试验都不行,最后干脆放在两列里,然后在asp程序中进行判断
      

  11.   

    直接改数据库的排序规则不行么?
    要么就在页面端进行Unicode转换处理.
      

  12.   

    楼猪你的问题搞好没,貌似我也是,你也是用四班的吧,可以这样吗,在数据库中创建一个表,从ITMB中复制过来的,然后把描述的字段类型改成NVARVHAR