`

sqlserver排序规则问题

阅读更多
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

select *
from #t1 A inner join #t2 B
on A.name=B.name collate Chinese_PRC_CI_AI_WS

--加上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区分 

区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。
区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,
         比较还将重音不同的字母视为不等。
区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。
区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项
分享到:
评论

相关推荐

    SQL SERVER 字符集问题之一解决

    在 SQL SERVER 中,我们可能会遇到 equal to 运算中的排序规则冲突问题,例如,使用 Chinese_PRC_CI_AS 和 Chinese_PRC_CS_AS 两个字符集时,出现排序规则冲突。这是因为这两个字符集的排序规则不同,导致在 equal ...

    navicat for sqlserver

    **Navicat for SQL Server** 是一款强大的数据库管理和开发工具,专为Microsoft SQL Server设计。它允许用户在不安装SQL Server的情况下,远程连接到数据库,从而实现对SQL Server的便捷管理和操作。Navicat提供了...

    排序函数(sqlserver)

    SQL Server支持自定义排序规则(Collations),允许我们根据特定的语言和区域设置调整排序和比较行为。例如,对于拼音处理,可以创建一个基于拼音的排序规则,使得中文字符按照拼音首字母排序: ```sql SELECT * ...

    sql server安装指南

    数据库引擎配置是数据库的核心配置部分,它包括选择认证模式(Windows认证模式或混合模式),添加SQL Server管理员账户,以及配置排序规则和服务器协议。认证模式的选择取决于用户是希望通过Windows操作系统的认证...

    SQL Server 2008乱码问题

    通过理解字符编码和排序规则的概念,以及如何在SQL Server中正确配置它们,可以有效地避免和解决中文乱码问题,确保数据库中的数据能够正确地被存储、检索和显示。在开发和维护涉及多语言的应用时,对这些细节的把握...

    SQL Server精华 (CHM)_sqlserver_SQLServer笔记_

    《SQL Server精华 (CHM)_sqlserver_SQLServer笔记_》是一部综合性的SQL Server学习资源,旨在帮助用户深入理解和掌握Microsoft SQL Server数据库管理系统的核心概念、功能和最佳实践。这部笔记涵盖了一系列关键知识...

    SQL Server中获取多音字拼音首字母.pdf

    "SQL Server中获取多音字拼音首字母.pdf" 本文主要讨论了在 SQL Server 中...本文提出了一个基于 SQL Server 排序规则的获取汉字拼音首字母的方法,该方法可以解决多音字词组的问题,并且实验结果表明该方法是可行的。

    SQLserver排序规则基本概念探索

    那有没有什么字符集或排序规则,能兼容所有文字的?对于海外项目很痛苦啊 .Oracle 有AL32UTF8 ,MySQL 有UTF8 ,那SQL Server 有吗? 基本概念 ASCII编码 在计算机发明后不久,计算机只在美国用。他们创造出了...

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

    在SQL Server数据库中遇到中文乱码问题,通常是由于安装时默认的排序规则不适用于中文环境导致的。默认情况下,SQL Server可能使用拉丁文排序规则,这在处理中文字符时会出现问题。解决这个问题需要理解SQL Server的...

    sqlserver排序规则在全角与半角处理中的应用 sql源码

    sqlserver排序规则在全角与半角处理中的应用 sql源码 简单明了好资料

    SqlServer删除所有表数据语句

    Sql Server 允许两种类型的排序规则:Windows 排序规则和 SQL 排序规则。Windows 排序规则是 Sql Server 的首选,因为它们提供了更多选项并且和微软 Windows 环境提供的支持一致。SQL 排序规则用于早期的 Sql Server...

    SQL 关于记录排序 sqlserver

    在 SQL Server 中,`RANK()` 是一个窗口函数,它为每一行分配一个唯一的排名,根据指定的列进行排序。如果两行或多行具有相同的值,则它们将获得相同的排名,并且下一行的排名将跳过相应的数字。例如,如果有两行...

    完美解决SQL server2005中插入汉字变成问号的问题

    关于SQL server2005中插入汉字变成问号的解决办法 1.右击你所建的数据库,点击“属性”,选择“选项”并点击。将其中的排序规则设置为:Chinese_PRC_CI_AS(选择下拉列表框即可设置),然后“确定“。2.在表中将你的...

    SQL SERVER 2022安装详细教程

    7. 排序规则:默认即可,除非有特定需求。 8. 服务器配置:建议设置为混合模式,并设置强密码的sa账户。 9. 数据目录:用户数据库文件的位置可自定义,但不建议修改根目录。 10. TempDB配置:设置TempDB数据文件数量...

    SQL_server_2005排序规则的修改.doc

    本文将详细介绍 SQL Server 2005 的排序规则修改,包括修改的必要性、修改的方法和修改后可能遇到的问题。 一、为什么需要修改排序规则? 在 SQL Server 2005 中,默认的排序规则是区分大小写的,这意味着数据库会...

    Microsoft SQL Server 2005技术内幕:存储引擎(中文).pdf

     字符与排序规则  排序次序  安装SQL Server的多个实例  安装SQL Server命名实例  1.3 做好安装准备  SQL Server 2005升级向导  1.4 迁移还是升级  迁移  升级  升级后的操作  1.5 选择组件 ...

    42-SQL Server服务器修改排序规则的方法.docx

    SQL Server 服务器修改排序规则的方法 SQL Server 服务器修改排序规则的方法是指在 SQL Server 服务器中修改数据库环境的排序规则,以满足不同地区和语言的需求。本文将介绍如何修改 SQL Server 服务器的排序规则,...

    sqlserver 区分大小写的相关设置

    SQL Server 区分大小写的相关设置 在 SQL Server 中,默认情况下,数据库是区分大...SQL Server 中的 COLLATE 子句可以用于控制数据库、表和列中的大小写敏感度,用户可以根据需要选择不同的排序规则和大小写敏感度。

    根据拼音在sqlserver查询汉字

    本示例主要展示了如何利用SQL Server的排序规则和自定义函数来实现这一功能。 首先,我们要理解SQL Server的排序规则(Collation)。排序规则决定了字符的比较方式,包括字符集(Charset)和排序顺序(Collation)...

    vs自带数据库sql server的中文插入乱码问题、查找当前数据库名

    解决两个问题:vs自带数据库sql server的中文插入乱码问题、查找当前数据库名 (查找数据库名在文章中间,自己往下翻吧,不单拎出来了) vs自带数据库sql server的中文插入乱码问题: 如图所示,我插入表的中文变成...

Global site tag (gtag.js) - Google Analytics