錯誤信息:
[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