日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server 问题之 排序规则(collation)冲突

發布時間:2025/4/5 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 问题之 排序规则(collation)冲突 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、寫在前面

  最近公司進行開發環境升級,數據庫也準備了一個新的服務器,一切準備好后開始數據遷移,采取的方式為對現有Database(現有服務器Windows Server 2003 + SQL Server 2005)進行Back up,然后在新服務器(Windows Server 2008 R2 + SQL Server 2008 R2)上再Restore Databse,一切似乎挺順利的。但是當從Web Server開始訪問的時候出現錯誤Cannot resolve the collation conflict between "Chinese_PRC_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.

?

二、問題分析

  上面出現的問題是由于排序規則沖突(collation)而引發,具體說來就是數據庫所使用的語言的排序規則沖突,查看數據庫所(老服務器)使用的排序規則如下所示

  而新服務器上數據庫的排序規則為SQL_Latin1_General_CP1_CI_AS(就不上圖了),由此可以看出排序規則不同,此即問題所在。

  那么為什么數據庫的排序規則會不同呢?換句話說數據庫的排序規則是怎么來的?原來這里的排序規則是在安裝SQL Server數據庫實例時配置/指定的,默認的排序規則將基于操作系統的區域語言設置,我們新服務器OS的區域語言為US - English,而在安裝SQL Server數據庫實例時我們又沒有配置排序規則(采取了默認的方式),所以才導致最終數據庫的排序規則為SQL_Latin1_General_CP1_CI_AS

?

三、解決問題

  下面列出解決此問題可能的方式以及說明

1. 在SQL語句中強行指定排序規則,類似的SQL語句如下所示 (COLLATE Chinese_PRC_CI_AI_WS)

SELECT A.ID, B.NO FROM TABLEA A INNER JOIN TABLEB B ON A.NAME=B.NAME COLLATE Chinese_PRC_CI_AI_WS

這種方式雖能解決問題,但是不建議采取,因為一旦需要更改的SQL語句很多,對開發者而言將是一種災難,而且不能從根本上解決問題

2. 更改字段、表、數據庫的排序規則

腳本更改數據庫的排序規則

ALTER DATABASE DBNAME COLLATE Chinese_PRC_CI_AS

雖然通過更改數據庫級別的排序規則能很大程度上解決大部分問題,但是一旦用到TempDB(確切地說使用到臨時表,例如Store Procedure中),排序規則問題將再次面臨,而且致命的是系統數據庫master貌似無法更改排序規則,至少筆者通過腳本運行的時候提示沒有權限運行,所以此種方式也沒有從根本上解決問題。

說明:重建數據庫也是不行的,只要master的排序規則沒變你就無法解決問題。

3. 承接上面的第二點,既然無法通過腳本更改master數據庫的排序規則,那么就重建master數據庫

執行類似下面的腳本

setup.exe /q /ACTION=RebuildDatabase /INSTANCENAME=MSSQLSERVER /SAPWD="sa-pwd" /SQLSYSADMINACCOUNTS="BUILTIN\ADMINISTRATORS" /SqlCollation=Chinese_PRC_CI_AS

或參考MSDN的文章http://support.microsoft.com/kb/298568/zh-cn

筆者沒有驗證此種方式是否有效(筆者采用上面的腳本運行,但是沒成功)

4. 卸載/重裝SQL Server實例

首先更改操作系統的區域語言為CN - Chinese,然后卸載并重裝SQL Server,之所以更改系統的區域語言設置,是為了在安裝SQL Server的時候可以采用默認的排序規則(當然你也可以不更改區域語言設置,但在安裝SQL Server的時候手工配置/指定排序規則為Chinese_PRC_CI_AS,到“排序規則設置”界面時,系統默認選擇的是以下拉框的形式選擇排序規則的選項),此種方法徹底解決問題,推薦使用。

四、寫在最后

  以后再做數據庫遷移的時候,首先應該增加檢查現有數據庫的排序規則,然后在新服務器上安裝數據庫時,應確保和原有數據庫的排序規則一致。引申一下:其實不僅排序規則如此,其它有可能引起沖突或不兼容的都應該相應地做個檢查,做到升級或遷移之前解決問題,而不是把問題留到新服務器上,因為一旦時間緊迫,將是個災難,尤其是正式庫的升級。

轉載自:http://www.cnblogs.com/panchunting/p/SQLServer_Issue_Collation.html

?

程序員的基礎教程:菜鳥程序員

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的SQL Server 问题之 排序规则(collation)冲突的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。