有个需求:要求数据库系统自动同步两个不同数据库中的人员信息。
首先想到写一个存储过程然后由系统任务来自动处理。
尝试性的写了下面的查询语句:
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
分享到:
相关推荐
在题目所给的示例中,创建了两个临时表`#t1`和`#t2`,分别具有不同的排序规则:`#t1`使用`Albanian_CI_AI_WS`,而`#t2`使用`Chinese_PRC_CI_AI_WS`。当尝试使用`INNER JOIN`将这两个表联接起来,并基于`name`字段...
这个命令将修改排序规则为 Chinese_PRC_CI_AS,使得数据库不区分大小写。 三、修改排序规则后可能遇到的问题 在修改排序规则后,可能会遇到一些问题,例如,数据库中的数据可能无法被正确地查询出来。这是因为...
为了解决这个问题,可以在连接条件上明确指定一个共同的排序规则,例如`collate Chinese_PRC_CI_AI_WS`,这会使得两个表的比较基于同一个字符集和排序规则,从而避免冲突。 排序规则的名称由两部分组成:字符集和...
在SQL中,默认的排序方式通常是基于字符集和排序规则的。对于中文字符来说,这种排序方式往往是按照其Unicode编码进行的,而并非我们常见的拼音或笔画顺序。例如,在默认情况下,“啊”、“八”、“安”的排序结果...
在这里,我们显式指定了`Chinese_PRC_CI_AI_WS`作为共同的排序规则,从而避免了排序规则冲突的问题。 #### 三、排序规则的应用场景 排序规则在实际应用中非常重要,尤其是在需要对文本数据进行精确匹配和排序的...
3. 在“排序规则”部分,选择“修改”,然后选择适合中文的排序规则,例如`Chinese_PRC_CS_AI_WS`。 如果以上方法无法解决问题,或者希望从一开始就避免乱码问题,可以采取更彻底的方法——重新安装SQL Server。 *...
这个语句将创建一个名为 db 的数据库,并将其排序规则设置为 Chinese_PRC_CI_AS。 ALTER DATABASE db COLLATE Chinese_PRC_BIN 这个语句将更改名为 db 的数据库的排序规则为 Chinese_PRC_BIN。 在更改数据库的...
例如,`Chinese_PRC_Stroke_CI_AI_KS_WS`这个排序规则对应的编码是936,即GBK编码。 在PHP中,如果你的数据库字段包含中文,而PHP文件的编码设置为GBK或GBK2312(GBK2312与GBK是等价的),那么当你从数据库读取数据...
- `Chinese_PRC_CI_AI` 是一个具体的排序规则,表示中国地区(PRC)的不区分大小写和重音(CI)以及支持多种语言(AI)的排序规则。 4. **理解排序规则** - 排序规则由两部分组成:前缀和后缀。 - 前缀定义了...
例如,可以先通过`Chinese_PRC_BIN`规则获取汉字的排序位置,然后通过另一个规则(如`Chinese_PRC_CI_AS`)再次获取排序位置,最后对比这两个位置来推断出汉字的拼音简码。 ### 4. 应用实例 假设我们需要查询数据库...
ALTER COLUMN 列名 nvarchar(100) COLLATE Chinese_PRC_CI_AS; ``` - **区分大小写**:同样地,也可以修改字段为区分大小写: ```sql ALTER TABLE 表名 ALTER COLUMN 列名 nvarchar(100) COLLATE Chinese_PRC_...
这里的`Chinese_PRC_CI_AI`是一个排序规则,表示简体中文,不区分大小写,不区分重音。不同的排序规则可以影响到中文字符、数字以及标点符号的排序顺序。 在处理全角和半角字符时,SQL Server同样有相应的机制。...
- 为表中的列指定排序规则:`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_Latin1_General_CP1_CI_AS**:这是一种常用的排序规则,表示使用ASCII编码,且不区分大小写或重音符号。 - **Chinese_PRC_CS_AI**:这是一种特定于中文环境的排序规则,其中_CS表示区分大小写,_AI表示...
例如,“Chinese_PRC_CI_AS”中,“Chinese_PRC”表示字符集,支持中国的简体汉字;“CI”表示不区分大小写,“AS”表示不区分重音。不同的排序规则会影响数据的排序顺序和比较结果。 排序规则的后缀部分具有特定...
例如,`Chinese_PRC_CI_AS`表示简体中文、不区分大小写、按拼音排序,而`Chinese_PRC_CS_AS`则表示简体中文、区分大小写、按拼音排序。 1. **单个大写字母的判断**: 如果你想检查字段`RecEngineBizName`是否包含...
第二行代码则使用了不区分大小写的排序规则`Chinese_PRC_CI_AI`,因此即使大小写不同,只要字符相同,也会被视为匹配。 #### 六、改变排序规则的方法 - **安装时设置**:在安装SQL Server时可以设置服务器的默认...