[SQL Server]无法解决 equal to 运算中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突。

发布时间 2023-09-04 15:30:55作者: djd66

错误信息:

[SQL Server]无法解决 equal to 运算中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突。

场景:

一个简单的SQL语句,因为团队合作建表时排序方式不同,两个字段无法比较

  select mca.* ,mo.Name
  from MemberCA mca
  left join MOrganization mo on mca.OID = mo.Id

解决:

使用COLLATE改变其中一个字段的排序方式

  select mca.* ,mo.Name
  from MemberCardApply mca
  left join Mall_Organization mo on mca.OrganizationID COLLATE Chinese_PRC_CI_AS = mo.Id

 

扩展:

sqlserver字符集问题(中文出乱码,排序错误等)
在创建sqlserver 数据库时未指定排序字符集,databases则会使用instances的排序规则。为了支持中文,需要设置成Chinese_PRC_CI_AS。
通过sql脚本修改
--修改现有databases的排序规则 ALTER DATABASE mydb COLLATE Chinese_PRC_CI_AS

1.执行SQL 修改为单用户模式 ALTER DATABASE db_database SET SINGLE_USER WITH ROLLBACK IMMEDIATE
2.然后关闭所有的查询窗口,修改Options的Collocation属性为Chinese_PRC_90_CI_AS
3.执行SQL 再修改为多用户模式 ALTER DATABASE db_database SET MULTI_USER

 

来自:https://www.cnblogs.com/lnvc/p/12835116.html