【问题标题】:Windows Collation error occured when deployed window 2012部署 windows 2012 时出现 Windows Collat​​ion 错误
【发布时间】:2017-09-20 08:26:35
【问题描述】:

我的问题可能与this question 同名:实时部署时的Sql 排序问题。然而,这个问题已经有 8 年历史了,并且讨论了不同 sql server 上的问题。

我的信息如下:

  • 开发环境:Windows 8
  • 测试环境:windows 2012

来自this问题:

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1
UNION ALL
Select '' AS Place, 'Arizona' As State, Country FROM DEPT2

在 sql server 上正常工作。

部署到具有相同连接字符串的测试服务器(到相同的数据库)时会出现问题 所以我只能猜测与windows os差异相关的问题。

错误信息是:

无法执行 varchar 值到 varchar 的隐式转换,因为 UNION ALL 运算符中的“Turkish_CI_AS”和“Turkish_100_CI_AI”之间的排序规则冲突导致值的排序规则未解决。

当我运行我的 UNION sql 查询时。

仅在更改 Windows 操作系统的情况下,可能是什么原因以及如何处理给定的错误?

编辑:作为同事的结束问题告知 db 不一样,所以问题不再有效

【问题讨论】:

  • tempdb的排序规则是什么?
  • 同sql server:Turkish_100_CI_AI
  • 你是什么COLUMN City排序规则?如果您没有更改它,它应该具有与 db 排序规则相同的排序规则,并且您根本不需要使用 COLLATE DATABASE_DEFAULT。您的查询中没有临时对象,如果 column collat​​ion = db collat​​ion,它应该表现良好

标签: sql-server collation


【解决方案1】:

请在两种环境中执行此查询:

select COLUMNPROPERTYEX(object_id('dbo.DEPT1'), 'City', 'Collation') as column_collation,
       DATABASEPROPERTYEX(db_name(), 'Collation') as db_collation, db_name() as db_name;

如果您从问题中得到确切查询的错误,则差异在于您的列排序规则和数据库排序规则。

如果您没有明确定义列排序规则,则它继承自数据库排序规则,并且当您在该数据库中执行查询时根本不需要 COLLATE。

如果您的查询是在另一个数据库的上下文中执行的,或者您使用临时表(使用 tempdb 的排序规则创建的),那么您需要使用 COLLATE。

所以请再检查一次你的数据库排序规则、你的列排序规则和数据库(也许你的查询是在另一个数据库中执行的,然后你认为)

【讨论】:

  • 如问题所述,db env 是相同的。唯一的区别是 iis 所以操作系统
  • @asdf_enel_hak 你能用我的查询结果更新你的帖子吗?用你的错误执行的查询,两者都是图片?
  • 运行结果:Turkish_CI_AS Turkish_CI_AS SPCMS
  • @asdf_enel_hak 和 DEPT2?
  • 同样的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多