[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