I'll be back!

  Focus on BPM, celebrate PegaRULES Process Commander (PRPC)
posts - 76, comments - 161, trackbacks - 0, articles - 2
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突。
Cannot resolve the collation conflict between SQL_Latin1_General_CP1_CI_AS and Finnish_Swedish_CI_AS in the equal to operation.

网上有很多解决办法,但基本上都要改动SQL语句。

工作中,从国外得到一个MS SQL Server 2005的备份文件,打算把他还原到本地服务器使用里面的数据。

本地操作系统是MS Windows XP Professional 英文版,安装了MS SQL Server 2005 开发版,还原数据库后,运行数据出现错误如下:
“无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突。”

检查数据库发现:SQL Server 2005服务器的排序规则是"Chinese_PRC_CI_AS",而数据库的排序规则是"SQL_Latin1_General_CP1_CI_AS",在网上查询得知,原因是这两种排序规则不统一所致。我尝试过两种方法让他们统一,但结果都无效:
1。 更改数据库的排序规则为"Chinese_PRC_CI_AS"。通过SQL Server Management Studio图形界面Property-Options-Collaction或SQL语句“ALTER DATABAS [DBName] COLLATE Chinese_PRC_CI_AS”更改无效。
2。 重构数据库“setup.exe /qn INSTANCENAME=SQL2005 REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=sa2005 SQLCOLLATION=SQL_Latin1_General_CP1_CI_AS” 方法无效。

后来研究了很多种方法,如下载SQL Server 2005企业版安装,但是企业版不适合安装在XP Professional系统上,以失败告终。

最后实在没办法,决定在此重装SQL Server,推测原因最可能还是本地系统使用了中文的排序规则,必须让本Server的地排序规则安装的时候就设置成"SQL_Latin1_General_CP1_CI_AS",即在纯英文操作系统下安装SQL Server 2005,后来实验成功。具体方法如下:
1。 尽管我的操作系统是XP系统,但是“区域语言设置”中全部设置为中文了,当前系统和中文操作系统无异。要让SQL Server 2005顺利安装,需要将所有“区域语言设置”都切换成英语(美国),这个在中文操作系统中也应该有效。
2。 安装MS SQL Server 2005,到“排序规则设置”界面时,系统默认选择的是以下拉框的形式选择排序规则的选项,英文状态下应该默认是“Latin1_General”,切忌不要选择这个排序规则,需要选择的是第二个单选框:SQL排序规则(用于确保与旧版本的SQL Server兼容) 这个选项,在列表中选择“字典顺序,不区分大小写,用于1252字符集。”就ok了,这就是传说中的"SQL_Latin1_General_CP1_CI_AS"字符集,即英文字符集。

SQL Server安装好后,打开SQL Server Management Studio界面查看Server的排序规则,确认为"SQL_Latin1_General_CP1_CI_AS",重新导入外来备份文件,大功告成!


评论

# re: 无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突  回复  更多评论   

2010-06-21 10:48 by 18傲骨中文
数据库就是令人头大

# re: 无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突  回复  更多评论   

2010-07-14 08:49 by MICKLI
ALTER DATABASE [DBName] COLLATE Chinese_PRC_CI_AS需要在单用户模式下执行

ALTER DATABASE [DBName] SINGLE_USER WITH ROLLBACK IMMEDIATE;

# re: 无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突  回复  更多评论   

2011-12-28 11:01 by stalwartwill
晕,现在我的机器上需要用两个数据库,但两个数据库需要的排序规则不一样。。。。

# re: 无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突  回复  更多评论   

2014-10-20 18:01 by 勇敢的心
FROM A INNER JOIN
B ON (A.CODE BETWEEN B.From collate SQL_Latin1_General_CP850_BIN AND B.To collate SQL_Latin1_General_CP850_BIN )
AND (A.[NO] BETWEEN B.From collate SQL_Latin1_General_CP850_BIN AND B.To collate SQL_Latin1_General_CP850_BIN)

字段后面加上更改后的排序规则即可
collate SQL_Latin1_General_CP850_BIN

只有注册用户登录后才能发表评论。


网站导航: