怎么将SQL简体中文版数据库中简体资料,在繁体系统的电脑中看到不是乱码?
在DBGRID中显示乱码?这个程序是在D7中编写,操做系统的WIN2000 SERVER 简体中文的。
在线等待,解决给分,帮UP有分。
在DBGRID中显示乱码?这个程序是在D7中编写,操做系统的WIN2000 SERVER 简体中文的。
在线等待,解决给分,帮UP有分。
解决方案 »
- 预祝三国成为Delphi版版主
- 请问怎么给一个事件添加代码啊?
- 请教一个关于DBGridEh的多选后的定位问题
- [在线等]弱弱的问:delphi里使用贴图算不算GDI编程?
- 怎么引用消息队列的控件?
- 请问如何读取一个字节中的各个比特?
- 求dbisam2.4
- 不知哪里能下《新编Windows API参考大全》这本书?
- 想做个个人管理软件,大家给点意见,来者有分!(为答谢各位兄弟的热情参与,现在开两百分帖子继续)
- 请教各位大虾:如何设置popupmenu的背景颜色?
- 求一种压缩算法
- ADOquery中新增3条记录,在提交时它是一条一条地插入后台SQLServer表的。如何设置才能让它把三条记录作为一批一次性地提交 ?
例如,你的数据库使用的是系统,并且你的应用服务器也采用的是简体,那么在应用服务器不支持Unicode的情况下就会将Unicode字符,强制转换成了GBK字符,而后传输到客户端,客户端却以BIG5来解释(显示),看到的就会是乱码。
如果是这类情况,可以考虑在界面上面做一个GB2BIG5转换。
=======================================================
各位同仁:
见信好!
关于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
===================================================
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
–—―‖‘’“”‥…─│┌┐└┘├┤┬┴┼═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▓▔▕■□▲△▼▽◆◇○◎●◢◣◤◥、。〃〈〉《》「」『』【】〒〔〕〝〞〡〢〣〤〥〦〧〨〩㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩︵︶︷︸︹︺︻︼︽︾︿﹀﹁﹂﹃﹄﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚﹛﹜﹝﹞﹟﹠﹡﹢﹣﹤﹥﹦﹨﹩﹪﹫!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
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]
基本表格内容(所有字段都是Unicode,可采用nvarchar):Unicode原文(GBK) BIG5对应文 GB2312对应文原因只在于现在需要处理的文字显示部分GBK库已经基本够用。