升级字符集、排序次序和排序规则
Microsoft® SQL Server™ 2000 支持几种不同的方法来指定排序规则。不需要再分别指定字符型数据的代码页和排序次序以及 Unicode 数据的排序规则。在升级时,可以指定 SQL 排序规则与 SQL Server 的现有实例兼容。因为 Microsoft SQL Server 实例的默认排序规则在安装过程中定义,所以熟悉以下情况中的 SQL Server 2000 排序规则设置很重要: 应用程序代码在某些方面依赖于先前的 SQL Server 排序规则的行为。
将在现有 SQL Server 6.5 或 SQL Server 7.0 安装中使用复制功能。
必须存储反映多种语言的字符型数据。
Microsoft® SQL Server™ 2000 支持几种不同的方法来指定排序规则。不需要再分别指定字符型数据的代码页和排序次序以及 Unicode 数据的排序规则。在升级时,可以指定 SQL 排序规则与 SQL Server 的现有实例兼容。因为 Microsoft SQL Server 实例的默认排序规则在安装过程中定义,所以熟悉以下情况中的 SQL Server 2000 排序规则设置很重要: 应用程序代码在某些方面依赖于先前的 SQL Server 排序规则的行为。
将在现有 SQL Server 6.5 或 SQL Server 7.0 安装中使用复制功能。
必须存储反映多种语言的字符型数据。
你上面这段话我看得迷迷糊糊的!是不是只要给SQL SERVER升级一下就可以解决字符数据的代码页不同的问题?
DataBase的代码页是无法更改的嘛?
你说的“应用程序代码在某些方面依赖于先前的 SQL Server 排序规则的行为。”可否稍微解释一下?
我上面提到的2、3个问题不知大侠可否帮忙看一下!多谢
SQL SERVER的排序规则平时使用不是很多,也许不少初学者还比较陌生,但有
一个错误大家应是经常碰到: SQL SERVER数据库,在跨库多表连接查询时,若两数据
库默认字符集不同,系统就会返回这样的错误:
“无法解决 equal to 操作的排序规则冲突。”一.错误分析:
这个错误是因为排序规则不一致造成的,我们做个测试,比如:
create table #t1(
name varchar(20) collate Albanian_CI_AI_WS,
value int)create table #t2(
name varchar(20) collate Chinese_PRC_CI_AI_WS,
value int )表建好后,执行连接查询:select * from #t1 A inner join #t2 B on A.name=B.name 这样,错误就出现了: 服务器: 消息 446,级别 16,状态 9,行 1
无法解决 equal to 操作的排序规则冲突。
要排除这个错误,最简单方法是,表连接时指定它的排序规则,这样错误就
不再出现了。语句这样写:select *
from #t1 A inner join #t2 B
on A.name=B.name collate Chinese_PRC_CI_AI_WS
二.排序规则简介: 什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server 2000 中,
字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存
储和比较字符所使用的规则。"
在查询分析器内执行下面语句,可以得到SQL SERVER支持的所有排序规则。 select * from ::fn_helpcollations() 排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。
如:
Chinese_PRC_CS_AI_WS
前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。
排序规则的后半部份即后缀 含义:
_BIN 二进制排序
_CI(CS) 是否区分大小写,CI不区分,CS区分
_AI(AS) 是否区分重音,AI不区分,AS区分
_KI(KS) 是否区分假名类型,KI不区分,KS区分
_WI(WS) 是否区分宽度 WI不区分,WS区分 区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。
区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,
比较还将重音不同的字母视为不等。
区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。
区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项
select partcode from B(nolock) where ctgycode='MB' collate SQL_Latin1_General_CP1_CS_AS)
1. 在两个不通字符集的database 之间 sql语句到底要怎么写阿?
2. 我发现一个可以正确显示中文的数据库却不能以含有中文的字段来查询。查询不出结果! 是否有方法解决?
这句话可将不同排序规则显示声明成当前数据库默认的排序规则另外你的sql写错了,你的sql语句应这样写select *
from A(nolock)
where ctgycode='MB'
and partcode not in (select partcode from B(nolock) where ctgycode='MB') collate SQL_Latin1_General_CP1_CS_AS因为你是把一个select语句当做一个条件来使,应是显示声明这个条件的排序规则
select *
from A(nolock)
where ctgycode='MB' and partcode not in
(select partcode collate SQL_Latin1_General_CP1_CS_AS from B(nolock) where ctgycode='MB')反正就是一个显示声明排序规则的事儿,看看帮助或来回试试应该很容易解决