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


 

错误信息:

[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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM