SQL Server: collation conflict between "Chinese_PRC_CI_AS" and "SQL_Latin1_General_CP1_CI_AS"

來源:互聯網
上載者:User

Issue: Cannot resolve the collation conflict between "Chinese_PRC_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.


Issue

在某跨國企業,有一天,DBA在北京這邊建立了一個用於測試的資料庫伺服器,這個DB Server我們就稱為 CH01 吧。
有一天,開發人員在 CH01 上運行業務系統,結果凡是用到了暫存資料表的預存程序都出錯了。錯誤碼如下:

Msg 468, Level 16, State 9, Procedure CIU_PCUDefaultStreams_SP_Temp_Panel, Line 250Cannot resolve the collation conflict between "Chinese_PRC_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.



Analysis

業務資料庫的定序設定(Collation settings)是:SQL_Latin1_General_CP1_CI_AS.



但是,CH01 這個DB Server的服務期定序設定是Chinese_PRC_CI_AS



所以,暫存資料表資料庫 tempdb 的定序設定(collation settings)和伺服器定序設定一樣,也是Chinese_PRC_CI_AS



當業務資料庫裡面的預存程序建立暫存資料表,這些暫存資料表是建立在 tempdb 裡面的。所以暫存資料表的定序設定(collation settings)也都是Chinese_PRC_CI_AS

所以,當業務資料庫裡面的物理表和 tempdb 裡面暫存資料表進行聯集查詢的時候,就出錯了。


How to resolve

解決的辦法有三個:


1. 建立表(包括暫存資料表)時,可以指定表的定序設定(collation settings)。

2. 在查詢語句中可以指定定序設定。

3. 可以在建立資料庫的時候指定定序設定,或者建立資料庫後可以改變定序設定。




相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.