SQL Server数据库简体繁体数据混用的问题
2010-10-01 09:00:31 来源:WEB开发网这篇论坛文章着重介绍了SQL Server数据库简体繁体数据混用的问题,详细内容请参考下文:
我现在要说的是一个在简体繁体数据混用的时候很容易发生的问题,但是这个问题也很容易被大家忽略。具体来说,这个问题会在所有采用不同排序规则的数据实例间关联数据的时候发生。也许我这么说大家还是弄不清楚到底是怎么回事儿,我先来讲一下我今天碰到的问题。
公司里面使用的数据库会有简体中文和繁体中文两种版本。我现在这个专案使用的SQLServer是繁体中文版的,但是需要使用到另一个使用简体中文版SQLServer专案的数据,我按照通常的做法把简体中文版SQLServer中的一个数据表导入到现在使用的繁体中文版SQLServer中,结构和数据都导入成功了。我一开始并没有意识到这样做会有什么问题。接下来我开始调试SQL语句,其实是一个很简单的两表关联数据选择大致如下:
select table1.*,table2.*
from table1
inner join table2 on table2.FK = table1.PK
照理说这么简单的语句没道理会出什么问题,不过在查询分析器里面始终提示如下的错误
服务器: 消息 446,级别 16,状态 9,行 1
無法解析 equal to 動作的定序衝突。
后来搜索了一下,然后又看了一下T-SQL的帮助,才知道原来是因为我将简体中文SQL Server中的数据表导入到繁体中文的数据表中的是后,连同原数据的排序方式一并导入,导致了简体数据表的排序方式依然是简体,所以无法进行比较,从而出错。解决的办法是指名排序方式,告诉查询分析器应该怎样排序即可。这里会需要用到一个关键字 COLLATE Coliate 在SQLServer联机丛书中是这样解释的:
COLLATE
一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则投影。
更多精彩
赞助商链接