SQL Server, Cannot resolve the collation conflict

时间:2021-12-16 13:14:17

今天遇到一个较为头痛的问题:

Cannot resolve the collation conflict between "Chinese_PRC_90_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.

SQL2008 R2,数据库是从SQL2005的备份文件还原回来的。

估计是因为各种环境问题从而导致同一个数据库不同的表中的列有不同的Collation设置,导致在通过这样的字段连接两个表的时候报上面的错误。

有几个不错的连接描述了相关问题:

http://technet.microsoft.com/en-us/library/hh230914.aspx

http://blog.sqlauthority.com/2008/12/16/sql-server-find-collation-of-database-and-table-column-using-t-sql/

http://www.mssqltips.com/sqlservertip/2901/how-to-change-server-level-collation-for-a-sql-server-instance/

但是执行这个SQL:

SELECT distinct collation_name FROM sys.columns

列出了五六种不同的设置,可能涉及到很多表和字段,总不可能一个一个去改吧。

报着试一下的心理:把这个数据库的数据导出到另一个数据库(也是2008R2),看能不能解决这个问题。结果还真管用,不用一个一个去改了。

用的工具是:SQL Server Management Studio

这里的导出不是备份,通常是Backup成一个文件再还原到另外一个数据库。

我用的导出是点数据库的右键,选择Export Data,这样导出数据库就可以。