我有一个SQL Server 2012企业版链接服务器连接到IBM AS400 DB2数据库。我正在使用IBMDASQL
提供程序进行连接。
我有一些匈牙利字符的问题:在选择过程中,字母Ő
转换为O
。
在本例中,name_converted
列将是OK的,Ő
字母仍然是Ő
。
name列将被转换为O
。
SELECT * FROM openquery (g,
SELECT
cast(name as char(35) ccsid 870) as name_converted,
name,
FROM libr.mytable')
我的问题是:我可以创建链接服务器,以便所有字符都使用CCSID 870吗?
EXEC master.dbo.sp_addlinkedserver @server = N'G', @srvproduct = N'HUN00101', @provider = N'IBMDASQL', @datasrc = N'HUN00101'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'G', @useself=N'False',
@locallogin=NULL, @rmtuser=N'query', @rmtpassword='########'
GO
EXEC master.dbo.sp_serveroption @server = N'G', @optname = N'collation compatible',
@optvalue = N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'data access', @optvalue=N'true' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'dist', @optvalue=N'false' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'pub', @optvalue=N'false' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'rpc', @optvalue=N'false' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'rpc out', @optvalue=N'false' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'sub', @optvalue=N'false' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'connect timeout', @optvalue=N'0' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'collation name', @optvalue=null GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'lazy schema validation', @optvalue=N'false' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'query timeout', @optvalue=N'0' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'use remote collation', @optvalue=N'true' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'remote proc transaction promotion', @optvalue=N'true' GO
谢谢
看起来数据可能没有在IBM i系统上正确地使用CCSID 870进行标记。你可以尝试使用"强制翻译"自定义属性并将其设置为870吗?注意:这将导致所有没有正确标记CCSID的数据被处理为CCSID 870。