无法解决等于操作中“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS”之间的排序规则冲突

Posted

技术标签:

【中文标题】无法解决等于操作中“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS”之间的排序规则冲突【英文标题】:Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operations 【发布时间】:2017-04-26 14:22:22 【问题描述】:

这是我的 sql 查询

DELETE FROM [Prospects].[dbo].[P1]
WHERE RTRIM(LTRIM(DomainName)) IN
    (SELECT RIGHT(UserEmail, LEN(UserEmail) - CHARINDEX('@', UserEmail)) UserEmail
     FROM   [Recruiter].[dbo].[tblSystemUser])

如何解决这个问题?

【问题讨论】:

看起来你需要在你的数据库设计上工作......一致的排序规则使用是诀窍! Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation的可能重复 【参考方案1】:

你可以添加

COLLATE DATABASE_DEFAULT

到查询的末尾进行转换并修复错误,但这会影响性能。

正如 jarlh 所建议的,将数据库的排序规则更改为相同是实际的解决方法。

【讨论】:

更改数据库的排序规则 听起来很简单,但却是一个非常复杂的挑战。索引、约束、键都取决于此...如果您的服务器的默认设置不同,它可能会导致最严重的麻烦。此默认值是您的tempdb 中的默认值。当您使用 #table 并尝试加入 varchar 列时,这会出现神秘消息... @Shnugo 虽然只是 SQL 与通用版本,但他的排序规则基本相同......所以不应该真正破坏任何东西......我建议他将非标准的排序规则更改为与服务器默认设置相同,这将解决比它可能产生的问题更多的问题。唯一的区别是轻微的排序顺序差异和 unicode 处理 我写的不是错误或更改的结果,而是之前完美运行的非运行代码。我曾经不得不更改数据库的排序规则,这真是让人头疼。在这之后突然一堆存储过程抛出错误(类似于无法解决排序规则冲突)。 ORDER BYJOIN 对临时表中的字符串列进行操作的原因。过了一会儿我们又回到了原来的排序规则,这又是一件令人头疼的事情:-(【参考方案2】:

尝试将 COLLATE DATABASE_DEFAULT 添加到您的查询中:

DELETE FROM [Prospects].[dbo].[P1]
WHERE RTRIM(LTRIM(DomainName)) COLLATE DATABASE_DEFAULT IN
(SELECT RIGHT(UserEmail, LEN(UserEmail) - CHARINDEX('@', UserEmail)) COLLATE DATABASE_DEFAULT UserEmail
 FROM   [Recruiter].[dbo].[tblSystemUser]) 

【讨论】:

【参考方案3】:

试试看

    DELETE FROM [Prospects].[dbo].[P1]
    WHERE RTRIM(LTRIM(DomainName)) COLLATE DATABASE_DEFAULT IN
        (SELECT RIGHT(UserEmail, LEN(UserEmail) - CHARINDEX('@', UserEmail)) UserEmail
         FROM   [Recruiter].[dbo].[tblSystemUser

])

【讨论】:

以上是关于无法解决等于操作中“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS”之间的排序规则冲突的主要内容,如果未能解决你的问题,请参考以下文章

无法解决等于操作中“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS”之间的排序规则冲突[重复]

无法解决等于操作中“SQL_Latin1_General_Pref_CP1_CI_AS”和“Latin1_General_CI_AS”之间的排序规则冲突

Unity sdk 版本等于0,无法打包如何解决

Unity sdk 版本等于0,无法打包如何解决

iOS UIScrollView 无法滚动 没有弹簧效果解决方案

SQL Server:尽管进行了转换,但无法解决排序规则冲突