`
giga_Zhang
  • 浏览: 155018 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

操作中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CI_AI" 之间的排序规则冲突

阅读更多



 有个需求:要求数据库系统自动同步两个不同数据库中的人员信息。

首先想到写一个存储过程然后由系统任务来自动处理。

尝试性的写了下面的查询语句:

select WINDOWSID,NAME,EMAIL,DEPT,CONT from DB1.dbo.USER

 where WINDOWSID in (select WINDOWSID from DB2.dbo.USER)

发现SQL server2005报如下错误:

Msg 468, Level 16, State 9, Line 1

无法解决 equal to 操作中 "Chinese_PRC_CI_AS" "Chinese_PRC_CI_AI" 之间的排序规则冲突。



 

在网上查了半天资料,如果你看这片文章之前也查了些资料,应该和我看到的差不多,结果就是弄清楚了什么是“Chinese_PRC_CI_AS和“Chinese_PRC_CI_AI”你还会得到如下语句:

alter database DB1 collate Chinese_PRC_CI_AS;

alter database DB2 collate Chinese_PRC_CI_AS;

但是执行这两条语句后,再作查询,错误依旧。

然后根据之前网上的信息,修改查询语句为:

select WINDOWSID,NAME,EMAIL,DEPT,CONT from DB1.dbo.USER

 where WINDOWSID in (select WINDOWSID collate Chinese_PRC_CI_AS from DB2.dbo.USER)

发现查询可以得到结果。

下面对上面的问题做个总结:

第一步,基础知识。查看SQLserver2005的帮助,你会得到如下信息:

CollationDesignator

Specifies the base collation rules used by the Windows collation. The base collation rules cover the following:

       The alphabet or language whose sorting rules are applied when dictionary sorting is specified

       The code page used to store non-Unicode character data.

Some examples are:

       Latin1_General or French: both use code page 1252.

       Turkish: uses code page 1254.

For a list of collation designators, see Collation Settings in Setup.

CaseSensitivity

CI specifies case-insensitive, CS specifies case-sensitive.

AccentSensitivity

AI specifies accent-insensitive, AS specifies accent-sensitive.

KanatypeSensitive

Omitted specifies kanatype-insensitive, KS specifies kanatype-sensitive.

WidthSensitivity

Omitted specifies width-insensitive, WS specifies width-sensitive.

BIN

Specifies the backward-compatible binary sort order is to be used.

BIN2

Specifies the binary sort order that uses code-point comparison semantics introduced in SQL Server 2005.

我们可以详细认识到Chinese_PRC_CI_AS的含义。

第二步,修改数据库的collate。前文已提到的SQL语句可以用来修改数据库的collate  ,当然你也可以通过SQL2005界面更便捷的修改。

 

还有就是修改系统的全局collate

 

第三步:通过以上步骤可以说准备工作已经全部完成了。

既然数据库的collate都是Chinese_PRC_CI_AS为什么查询的时候还会报错?只有如下语句才能执行?

select WINDOWSID,NAME,EMAIL,DEPT,CONT from DB1.dbo.USER

 where WINDOWSID in (select WINDOWSID collate Chinese_PRC_CI_AS from DB2.dbo.USER)

只能有一种原因:嵌套查询语句的collate默认和设置的不一致,查看全局collate也是Chinese_PRC_CI_AS,那到底为什么还会报错呢?



 

因为在windows系统中大小写是不敏感的,难道是这个原因?

经过一番折腾对collate有了一定的了解,也算些收获吧!

写的不好,见谅!

  • 大小: 31.8 KB
  • 大小: 13.6 KB
  • 大小: 2.7 KB
分享到:
评论
1 楼 47478220 2011-02-17  
我也遇到此问题了,谢谢你的文章。

相关推荐

    无法解决 equal to 操作的排序规则冲突

    在题目所给的示例中,创建了两个临时表`#t1`和`#t2`,分别具有不同的排序规则:`#t1`使用`Albanian_CI_AI_WS`,而`#t2`使用`Chinese_PRC_CI_AI_WS`。当尝试使用`INNER JOIN`将这两个表联接起来,并基于`name`字段...

    SQL_server_2005排序规则的修改.doc

    这个命令将修改排序规则为 Chinese_PRC_CI_AS,使得数据库不区分大小写。 三、修改排序规则后可能遇到的问题 在修改排序规则后,可能会遇到一些问题,例如,数据库中的数据可能无法被正确地查询出来。这是因为...

    JAVA sql 汉字排序

    为了解决这个问题,可以在连接条件上明确指定一个共同的排序规则,例如`collate Chinese_PRC_CI_AI_WS`,这会使得两个表的比较基于同一个字符集和排序规则,从而避免冲突。 排序规则的名称由两部分组成:字符集和...

    SQL 中文排序

    在SQL中,默认的排序方式通常是基于字符集和排序规则的。对于中文字符来说,这种排序方式往往是按照其Unicode编码进行的,而并非我们常见的拼音或笔画顺序。例如,在默认情况下,“啊”、“八”、“安”的排序结果...

    学生信息管理系统sql

    在这里,我们显式指定了`Chinese_PRC_CI_AI_WS`作为共同的排序规则,从而避免了排序规则冲突的问题。 #### 三、排序规则的应用场景 排序规则在实际应用中非常重要,尤其是在需要对文本数据进行精确匹配和排序的...

    SqlServer数据库中文乱码问题解决方法

    3. 在“排序规则”部分,选择“修改”,然后选择适合中文的排序规则,例如`Chinese_PRC_CS_AI_WS`。 如果以上方法无法解决问题,或者希望从一开始就避免乱码问题,可以采取更彻底的方法——重新安装SQL Server。 *...

    何更改sql2005数据库的编码方式

    这个语句将创建一个名为 db 的数据库,并将其排序规则设置为 Chinese_PRC_CI_AS。 ALTER DATABASE db COLLATE Chinese_PRC_BIN 这个语句将更改名为 db 的数据库的排序规则为 Chinese_PRC_BIN。 在更改数据库的...

    PHP编码转换

    例如,`Chinese_PRC_Stroke_CI_AI_KS_WS`这个排序规则对应的编码是936,即GBK编码。 在PHP中,如果你的数据库字段包含中文,而PHP文件的编码设置为GBK或GBK2312(GBK2312与GBK是等价的),那么当你从数据库读取数据...

    SQL2005 数据库大小写规则

    - `Chinese_PRC_CI_AI` 是一个具体的排序规则,表示中国地区(PRC)的不区分大小写和重音(CI)以及支持多种语言(AI)的排序规则。 4. **理解排序规则** - 排序规则由两部分组成:前缀和后缀。 - 前缀定义了...

    在sql中实现汉语拼音查询

    例如,可以先通过`Chinese_PRC_BIN`规则获取汉字的排序位置,然后通过另一个规则(如`Chinese_PRC_CI_AS`)再次获取排序位置,最后对比这两个位置来推断出汉字的拼音简码。 ### 4. 应用实例 假设我们需要查询数据库...

    SQL2008对表名及字段区分大小写

    ALTER COLUMN 列名 nvarchar(100) COLLATE Chinese_PRC_CI_AS; ``` - **区分大小写**:同样地,也可以修改字段为区分大小写: ```sql ALTER TABLE 表名 ALTER COLUMN 列名 nvarchar(100) COLLATE Chinese_PRC_...

    排序函数(sqlserver)

    这里的`Chinese_PRC_CI_AI`是一个排序规则,表示简体中文,不区分大小写,不区分重音。不同的排序规则可以影响到中文字符、数字以及标点符号的排序顺序。 在处理全角和半角字符时,SQL Server同样有相应的机制。...

    MSSQL数据库排序规则如何更改

    - 为表中的列指定排序规则:`CREATE TABLE tb (col1 varchar(10), col2 varchar(10) COLLATE Chinese_PRC_CI_AS)`,`ALTER TABLE tb ADD col3 varchar(10) COLLATE Chinese_PRC_BIN`,`ALTER TABLE tb ALTER COLUMN...

    SQL查询区别大小写

    - **SQL_Latin1_General_CP1_CI_AS**:这是一种常用的排序规则,表示使用ASCII编码,且不区分大小写或重音符号。 - **Chinese_PRC_CS_AI**:这是一种特定于中文环境的排序规则,其中_CS表示区分大小写,_AI表示...

    SQLserver排序规则基本概念探索

    例如,“Chinese_PRC_CI_AS”中,“Chinese_PRC”表示字符集,支持中国的简体汉字;“CI”表示不区分大小写,“AS”表示不区分重音。不同的排序规则会影响数据的排序顺序和比较结果。 排序规则的后缀部分具有特定...

    SQL SERVER如何判断某个字段包含大写字母

    例如,`Chinese_PRC_CI_AS`表示简体中文、不区分大小写、按拼音排序,而`Chinese_PRC_CS_AS`则表示简体中文、区分大小写、按拼音排序。 1. **单个大写字母的判断**: 如果你想检查字段`RecEngineBizName`是否包含...

    mssql 区分大小写的详细说明

    第二行代码则使用了不区分大小写的排序规则`Chinese_PRC_CI_AI`,因此即使大小写不同,只要字符相同,也会被视为匹配。 #### 六、改变排序规则的方法 - **安装时设置**:在安装SQL Server时可以设置服务器的默认...

Global site tag (gtag.js) - Google Analytics