首页 > 解决方案 > coalesce 将非 unicode 字符转换为问号

问题描述

将应用程序从 迁移SQL Server 2012SQL Server 2017.

我运行以下 2 个数据导入查询(Namevarchar包含非英文字母的列)。

select Name from RemoteServer.RemoteDB.dbo.RemoteView
select coalesce(Name,'') from RemoteServer.RemoteDB.dbo.RemoteView

在 SQL 2012 上,结果是相同的。在 SQL 2017 上,我看到以下内容:

1

可能是什么原因?

不幸的是,我无法将远程服务器上的数据类型更改为nvarchar.

更新:更多信息。

链接服务器属性是相同的(在链接服务器上编写脚本SQL 2012并使用该脚本创建它SQL 2017)。

在两台服务器上(由于历史原因)服务器排序规则(和系统数据库排序规则)是Cyrillic_General_CI_AS,我的数据库排序规则是SQL_Latin1_General_CP1251_CI_AS.

在远程服务器上,服务器和数据库排序规则都是Cyrillic_General_CI_AS.

SQL 2012这两个查询中显示任何数据库上下文中的数据。

它在SQL 2017系统数据库上运行良好,如上面我的数据库所示。因此,它依赖于数据库排序规则。

标签: sql-serversql-server-2017

解决方案


问题不在于基本上只返回第一个非空值的合并函数,问题在于 varchar 数据类型而不是 nvarchar,但即使在使用 nvarchar 时也应该使用 N'Languageword',这里有一个示例来证明你.

DECLARE @Table AS TABLE
(
   RussianCol VARCHAR(100)
)

INSERT INTO @Table ( RussianCol )
VALUES ( 'спасбо' -- RussianCol - varchar(100)
       ),('Помогите')

SELECT * FROM @Table

推荐阅读