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

Posted

技术标签:

【中文标题】无法解决等于操作中“Cyrillic_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突【英文标题】:Cannot resolve the collation conflict between "Cyrillic_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation 【发布时间】:2018-10-20 09:30:42 【问题描述】:

MS SQL 服务器 2017

asp.net 核心 2

我从 c# 调用存储过程:

res = db.Query<SearchPictureInfoOutputModel>("sp_SearchPictureInfo", new  Prc_ID = input.Prc_ID, Cust_ID = input.Cust_ID, AppCode = input.AppCode,
                             commandType: CommandType.StoredProcedure).FirstOrDefault();

我得到错误:

System.Data.SqlClient.SqlException: '。'

如果我从 ms 管理工作室调用程序

DECLARE @return_value int

EXEC    @return_value = [dbo].[sp_SearchPictureInfo]
        @Prc_ID = 2663,
        @Cust_ID = 26429,
        @AppCode = N'19139'

SELECT  'Return Value' = @return_value

GO

没有错误,只是返回值。

如何解决排序规则?

【问题讨论】:

什么是分贝? EF 或 EF Core 或 ...? DB 上的排序规则是什么? 不,我们不使用 EF。只需调用 sql server db 的存储过程。 好的,但是 db 是什么类型的对象?你能显示更多代码吗? 【参考方案1】:

您的系统数据库很可能有不同的排序规则。

您可以通过在 SQL 管理工作室中执行以下查询来检查:

SELECT name, collation_name  
FROM sys.databases  

同样在非主数据库上,您可以使用右键单击 -> 属性 -> 常规 -> 维护,您将看到排序规则作为最后一个选项。

可以使用以下查询更改非主控:

USE master;  
GO  
ALTER DATABASE <<YOUR_DATABASE_OTHER_THAN_MASTER>>
COLLATE Latin1_General_CI_AS ;  
GO 

如果您必须更改主服务器(像我一样),您将无法通过 SQL 管理工作室。对我来说最简单的方法是停止它以及所有 SQL 服务,导航到 SQL 的 binn 文件夹(对于 2016 和 x64)是这样的:

C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn

那么如果你使用默认实例就运行:

sqlservr.exe -m -q"Latin1_General_CI_AS"

或您要设置的任何排序规则。如果您有多个实例,还添加以下参数:

-s"<<YOUR_SQL_INSTANCE>>" e.g. -> sqlservr.exe -m -s"SQLEXP2014" -q"Latin1_General_CI_AS" 

希望这能帮助您解决问题:)

来源:

https://docs.microsoft.com/en-us/sql/relational-databases/collations/view-collation-information?view=sql-server-2017

https://www.mssqltips.com/sqlservertip/3519/changing-sql-server-collation-after-installation/

【讨论】:

只是为像我这样不了解这里发生的细节的人添加:--- 1. 你很可能不得不改变你的“主人”,即使你的查询不涉及主数据库。一旦你改变它 - 所有其他数据库也会改变。 --- 2. SQL服务器可以安装在另一个目录中。对我来说是:C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Binn --- 3. 从命令提示符运行 sqlservr.exe 并等到它更新设置后,您可以在命令中停止它提示然后正常重启服务

以上是关于无法解决等于操作中“Cyrillic_General_CI_AS”和“SQL_Latin1_General_CP1_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:尽管进行了转换,但无法解决排序规则冲突