怎么将SQL简体中文版数据库中简体资料,在繁体系统的电脑中看到不是乱码?
在DBGRID中显示乱码?这个程序是在D7中编写,操做系统的WIN2000 SERVER 简体中文的。
在线等待,解决给分,帮UP有分。

解决方案 »

  1.   

    谢谢: QWERT520(别来无恙) ,你有没有QQ啊,我想进一步请教你一下。
      

  2.   

    我正在做一个远程查询的程序,服务器在大陆,客户在台湾,用的是繁体的操作系统(所以要在繁体系统中进行GB到Big5的转换),数据库中存的是简体,所有的字段用的是支持Unicode的nvarchar、ntext等,现在在客户端中显示数据时,简体全部都是乱码(界面已经没有问题),我用简繁转换的函数转换之后,还是乱码,我已经手足无措了。
      

  3.   

    在数据库当中若是繁体版的默认安装通常会选择繁体语言,同时内部数据库和表等以默认语言(即在创建字段或数据库时未指定语言,排序方式)创建。当然如果是用查询分析器查询的话,系统采用的是Unicode,所以不管你在繁体还是简体机器上看到的都不会是乱码,而Delphi本身并不支持Unicode,因为会以当前系统的语言环境做一个强制转换,从而导致了乱码的出现。
    例如,你的数据库使用的是系统,并且你的应用服务器也采用的是简体,那么在应用服务器不支持Unicode的情况下就会将Unicode字符,强制转换成了GBK字符,而后传输到客户端,客户端却以BIG5来解释(显示),看到的就会是乱码。
    如果是这类情况,可以考虑在界面上面做一个GB2BIG5转换。
      

  4.   

    另发一份公司关于繁体数据库转简体的讨论片段(已经实现)
    =======================================================
            各位同仁:
                见信好!
                关于DB转码的问题,现在有一个方案,由于GBK码包含的字符量大于BIG5码,
            所以建议不管是繁体转简体还是简体转繁体都通过先转换成GBK繁体,然后再做进一步转换。
            另外由于繁体同简体存在多对一的关系,例如简体当中的“发”字在繁体当中就对应有两个字
            “發”和“髮”,这样子在繁体转简体时不存在什么问题,但是在简体转繁体时就只能是统一转换成“發”字。
                目前在附件档中给出一繁体转简体的SQL Function和相关的资料档。基本操作步骤如下(繁转简):
                1.首先用BackUp档Restore两个繁体(DatabaseName和DatabaseNameSrc)的资料库到简体的SQL Server当中,然后再将其中一个资料库执行:
                use master
                go
                sp_configure 'allow updates', 1 --允许直接修改系统资料档
                reconfigure with override
                go
                alter database [DatabaseName] collate Chinese_PRC_Stroke_BIN --修改名为DatabaseName的Database排序方式
                go
                use [DatabaseName]
                go
                update syscolumns set collationid=65582 where collationid is not null --65582 即Chinese_PRC_Stroke_BIN
                go
                use master
                go
                sp_configure 'allow updates',0
                reconfigure with override
                go
     
                2.将附件档中的两个SQL用sa的身份在master资料库当中执行,从而生活master.dbo.ietrandata表和
                    master.dbo.TCSCConvert 这个Function
                3.由于IEERP系统当中所有存在文字的栏位皆为varchar,故可以采用下列语句,
                基本可以生成转换资料所需要SQL脚本(亦可以使用while加execute直接执行):
                    select  'update [DatabaseName].[iemis].['+object_name(id)+'] set ['+name+
                     ']=master.dbo.TCSCConvert(b.['+name+']) from [DatabaseName].[iemis].['+
                     object_name(id)+'] a with(nolock),[DatabaseNameSrc].[iemis].['+
                     object_name(id)+'] b with(nolock) where a.uid=b.uid'
                    from syscolumns 
      

  5.   

    转码函数(由于简体转繁体存在一对多的关系,可能会有错误,所以这里只给出繁体转简体的)
    ===================================================
    use master
    goif exists(select * from sysobjects where name=N'TCSCConvert' and xtype=N'FN')
       drop function TCSCConvert
    gocreate function TCSCConvert(@Source nvarchar(1000))
    returns nvarchar(1000)
    as
       begin
          declare
             @iLen integer,
             @i integer,
             @tempchar nvarchar(1),
             @iUnicode integer,
             @Result nvarchar(1000)         select @Result=N''         if @Source=N'' 
                return @Result         select @iLen=len(@Source)
             select @i=0         while  @i< @iLen
             begin
                select @tempchar=substring(@Source,@i+1,1)
                select @iUnicode=unicode(@tempchar)
                if (@iUnicode>=48 and @iUnicode<=57) or (@iUnicode>=65 and @iUnicode<=90) or (@iUnicode>=97 and @iUnicode<=122)
                   select @Result=@Result+@tempchar
                else
                   select @Result=@Result+isnull((select chss_c from ietrandata where u_c=@tempchar),@tempchar)   
                select @i=@i+1
             end         return  @Result
       end
      

  6.   

    http://community.csdn.net/Expert/FAQ/List_Room_FAQ_Index.asp?bigclassid=57
      

  7.   

    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=196450当中的函数只适合于简体环境下,否则转到繁体机器上时上面的字符本身就已经出现了诸如问号(?)之类的,那么还能用到?本人做的是一张二维表,收集了包括GBK繁体在内(Unicode范围0x4E00-0x9FA5及制表符和标点符号)的21171个汉字字符。在当前的数据作业当中基本够用。附(标点符号及制表符):
    –—―‖‘’“”‥…─│┌┐└┘├┤┬┴┼═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▓▔▕■□▲△▼▽◆◇○◎●◢◣◤◥、。〃〈〉《》「」『』【】〒〔〕〝〞〡〢〣〤〥〦〧〨〩㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩︵︶︷︸︹︺︻︼︽︾︿﹀﹁﹂﹃﹄﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚﹛﹜﹝﹞﹟﹠﹡﹢﹣﹤﹥﹦﹨﹩﹪﹫!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
      

  8.   

    在数据当中以二进制编码录入,虽然可读性很差,但却可以保证数据的正确,由于表格数据太多就只贴出主要片段,数据部分略...use master
    go
    if exists(select * from sysobjects where name=N'ietrandata' and xtype='U')
    drop table ietrandata
    CREATE TABLE [dbo].[ietrandata](
    [uid] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
    [cht_i] [varbinary](2) NOT NULL CONSTRAINT [DF_ietrandata_cht_i]  DEFAULT ((0)),
    [chs_i] [varbinary](2) NOT NULL CONSTRAINT [DF_ietrandata_chs_i]  DEFAULT ((0)),
    [cht_c] [varchar](2) COLLATE Chinese_Taiwan_Stroke_BIN NOT NULL CONSTRAINT [DF_ietrandata_cht_c]  DEFAULT (''),
    [chs_c] [varchar](2) COLLATE Chinese_PRC_Stroke_BIN NOT NULL CONSTRAINT [DF_ietrandata_chs_c]  DEFAULT (''),
    [chss_i] [varbinary](2) NOT NULL CONSTRAINT [DF_ietrandata_chss_i]  DEFAULT ((0)),
    [chss_c] [varchar](2) COLLATE Chinese_PRC_Stroke_BIN NOT NULL CONSTRAINT [DF_ietrandata_chss_c]  DEFAULT (''),
    [chst_i] [varbinary](2) NOT NULL CONSTRAINT [DF_ietrandata_chst_i]  DEFAULT ((0)),
    [chst_c] [varchar](2) COLLATE Chinese_PRC_Stroke_BIN NOT NULL CONSTRAINT [DF_ietrandata_chst_c]  DEFAULT (''),
    [u_i] [varbinary](2) NOT NULL CONSTRAINT [DF_ietrandata_u_i]  DEFAULT ((0)),
    [u_c] [nvarchar](1) NOT NULL CONSTRAINT [DF_ietrandata_u_c]  DEFAULT ('')
    ) ON [PRIMARY]go
    insert into ietrandata(cht_i,chs_i,chss_i,chst_i,u_i)values(0xA156,0xA843,0xA843,0x0000,0x1320) --N'–'
    insert into ietrandata(cht_i,chs_i,chss_i,chst_i,u_i)values(0xA158,0xA1AA,0xA1AA,0x0000,0x1420) --N'—'
    insert into ietrandata(cht_i,chs_i,chss_i,chst_i,u_i)values(0xA277,0xA844,0xA844,0x0000,0x1520) --N'―'
    ...
    go
    update ietrandata set cht_c=cht_i,chs_c=chs_i,chss_c=chss_i,u_c=u_i
    go
    CREATE INDEX [ietrandata_1] ON [ietrandata]([u_c]) ON [PRIMARY]
    go
    CREATE INDEX [ietrandata_2] ON [ietrandata]([chs_c]) ON [PRIMARY]
      

  9.   

    上面的表格本身只是一个临时性应用的,实际当中根本就无须这么复杂,而只需要字符正确即可,所有字符都可以采用Unicode,若是采用ANSI的话,速度要慢很多,若是做得不好还可能出现在繁体数据库当中操作简体字时出现问号(?)。
    基本表格内容(所有字段都是Unicode,可采用nvarchar):Unicode原文(GBK)   BIG5对应文   GB2312对应文原因只在于现在需要处理的文字显示部分GBK库已经基本够用。
      

  10.   

    多谢 unsigned(僵哥(当程序语言成为普及的第三语言之后……)),不过我看了还不是好明白,还是理解不大了,我是个初学者。。