sql-server - coalesce 将非 unicode 字符转换为问号
问题描述
将应用程序从 迁移SQL Server 2012
到SQL Server 2017
.
我运行以下 2 个数据导入查询(Name
是varchar
包含非英文字母的列)。
select Name from RemoteServer.RemoteDB.dbo.RemoteView
select coalesce(Name,'') from RemoteServer.RemoteDB.dbo.RemoteView
在 SQL 2012 上,结果是相同的。在 SQL 2017 上,我看到以下内容:
可能是什么原因?
不幸的是,我无法将远程服务器上的数据类型更改为nvarchar
.
更新:更多信息。
链接服务器属性是相同的(在链接服务器上编写脚本SQL 2012
并使用该脚本创建它SQL 2017
)。
在两台服务器上(由于历史原因)服务器排序规则(和系统数据库排序规则)是Cyrillic_General_CI_AS
,我的数据库排序规则是SQL_Latin1_General_CP1251_CI_AS
.
在远程服务器上,服务器和数据库排序规则都是Cyrillic_General_CI_AS
.
在SQL 2012
这两个查询中显示任何数据库上下文中的数据。
它在SQL 2017
系统数据库上运行良好,如上面我的数据库所示。因此,它依赖于数据库排序规则。
解决方案
问题不在于基本上只返回第一个非空值的合并函数,问题在于 varchar 数据类型而不是 nvarchar,但即使在使用 nvarchar 时也应该使用 N'Languageword',这里有一个示例来证明你.
DECLARE @Table AS TABLE
(
RussianCol VARCHAR(100)
)
INSERT INTO @Table ( RussianCol )
VALUES ( 'спасбо' -- RussianCol - varchar(100)
),('Помогите')
SELECT * FROM @Table
推荐阅读
- bash - cygwin 中的 bash 脚本误读了环境变量
- android - 来自 ScrollView -> 相对布局的内容未显示
- javascript - 如何从模态 PHP Codeigniter 插入数据
- php - 使用按钮单击 HTML 到 Excel 不起作用
- java - 尝试在空对象引用上调用虚拟方法“void android.support.v4.view.ViewPager.setOffscreenPageLimit(int)”
- .net - 程序集引用和绑定的自动化测试
- file - 两个单独的文件服务器可用一个地址
- facebook-graph-api - Facebook 图形错误如何计入 API 错误总数?
- javascript - 不接受 0 或 1 作为第一个数字的电话号码格式(不超过 10 位)的 RegEx 表达式
- javascript - React 是重新渲染整个顶级组件还是仅重新渲染发生变化的单个组件?