`

解决:sql 排序规则不一致问题

    博客分类:
  • WARN
阅读更多
把程序部署到服务器上时,登陆系统老出问题,看下tomcat日志,发现sql 排序规则问题
Chinese_PRC_CI_AS&Chinese_PRC_CS_AS冲突
参考信息:
1.sp_helpsort
SELECT SERVERPROPERTY ('Collation')
查看你的排序规则.
不过你的这个应该和字符集有关.

2.更改服务器排序规则
更改 SQL Server 2005 实例的默认排序规则的操作可能会比较复杂,包括以下步骤:

确保具有重新创建用户数据库及这些数据库中的所有对象所需的全部信息或脚本。
使用工具(例如大容量复制)导出所有数据。
删除所有用户数据库。
重新生成在 setup 命令的 SQLCOLLATION 属性中指定新的排序规则的 master 数据库。例如:
复制代码
start /wait setup.exe /qb INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=test SQLCOLLATION=SQL_Latin1_General_CP1_CI_AI
有关重新生成 master 数据库的详细信息,请参阅如何重新生成 SQL Server 2005 的 Master 数据库。
创建所有数据库及这些数据库中的所有对象。
导入所有数据。
注意: 
可以为创建的每个新数据库指定默认排序规则,而不更改 SQL Server 2005 实例的默认排序规则。

3.设置和更改数据库排序规则
创建新数据库时,可以使用下列内容之一指定排序规则:
CREATE DATABASE 语句的 COLLATE 子句。
SQL Server Management Studio.
SQL 管理对象 (SMO) 中的 Database.Collation 属性。
如果未指定排序规则,则使用服务器排序规则。
可以使用 ALTER DATABASE 语句的 COLLATE 子句来更改在用户数据库中创建的任何新对象的排序规则。使用此语句不能更改任何现有用户定义的表中列的排序规则。使用 ALTER TABLE 的 COLLATE 子句可以更改这些列的排序规则。
更改数据库排序规则时,需要更改下列内容:
数据库的默认排序规则,这一新的默认排序规则将应用于数据库中后续创建的所有列、用户定义的数据类型、变量和参数。根据数据库中定义的对象解析 SQL 语句中指定的对象标识符时,也使用新的默认排序规则。
将系统表中的任何 char、varchar、text、nchar、nvarchar 或 ntext 列更改为使用新的排序规则。
将存储过程和用户定义函数的所有现有 char、varchar、text、nchar、nvarchar 或 ntext 参数和标量返回值更改为使用新的排序规则。
将 char、varchar、text、nchar、nvarchar 或 ntext 系统数据类型和基于这些系统数据类型的所有用户定义的数据类型更改为使用新的默认排序规则。



SQL code :

1.将数据库的字符集修改为:
alter database dbname collate Chinese_PRC_CI_AS

2.

--1. 为数据库指定排序规则
CREATE DATABASE db COLLATE Chinese_PRC_CI_AS
GO

ALTER DATABASE db COLLATE Chinese_PRC_BIN
GO


/*====================================*/


--2. 为表中的列指定排序规则
CREATE TABLE tb(
col1 varchar(10),
col2 varchar(10) COLLATE Chinese_PRC_CI_AS)
GO

ALTER TABLE tb ADD col3 varchar(10) COLLATE Chinese_PRC_BIN
GO

ALTER TABLE tb ALTER COLUMN col2 varchar(10) COLLATE Chinese_PRC_BIN
GO


/*====================================*/


--3. 为字符变量和参数应用排序规则
DECLARE @a varchar(10),@b varchar(10)
SELECT @a='a',@b='A'

--使用排序规则 Chinese_PRC_CI_AS
SELECT CASE WHEN @a COLLATE Chinese_PRC_CI_AS = @b THEN '@a=@b' ELSE '@a<>@b' END
--结果:@a=@b

--使用排序规则 Chinese_PRC_BIN
SELECT CASE WHEN @a COLLATE Chinese_PRC_BIN = @b THEN '@a=@b' ELSE '@a<>@b' END
--结果:@a<>@b


3.

ALTER   TABLE   tb
  ALTER   COLUMN   colname   nvarchar(100)   COLLATE   Chinese_PRC_CI_AS 
--不区分大小写
ALTER   TABLE   tb 
  ALTER   COLUMN   colname   nvarchar(100)   COLLATE   Chinese_PRC_CS_AS 
--区分大小写
数据库
ALTER   DATABASE   database 
COLLATE   Chinese_PRC_CS_AS 
--区分大小写

ALTER   DATABASE   database COLLATE Chinese_PRC_CI_AS --不区分大小写


方法一.安装SQL时选择区分大小写
或安装完以后重建mastar,选择区分大小
C:\Program   Files\Microsoft   SQL   Server\80\Tools\Binn\rebuildm.exe

方法二.sql   server   8.0以上的版本才可以,7.0及其以下不支持
alter   database   数据库   COLLATE   Chinese_PRC_CS_AS
修改排序规则,改成大小写敏感的排序规则
如果只修改一个表,用alter   table语句 
如果修改一个库的默认排序规则,用alter   datebase语句 
如果修改整个服务器的默认排序规则,用Rebuildm.exe重建master库 
--指定排序规则就可以了

--示例 
select   replace('AbacB'   collate   Chinese_PRC_CS_AS_WS,'B','test') 

--如果你是要求表支持,则可以建表时指定排序规则,这样replace就不用写排序规则了 

--示例 
create   table   tb(a   varchar(20)   collate   Chinese_PRC_CS_AS_WS) 
insert   tb   values('Abac') 

select   replace(a,'a','test')   from   tb

drop   table   tb

指定排序规则即可

Windows   排序规则名称 
在   COLLATE   子句中指定   Windows   排序规则名称。Windows   排序规则名称由排序规则指示器和比较风格构成。 

语法 
<   Windows_collation_name   >   ::   = 

        CollationDesignator_ <ComparisonStyle>

        <   ComparisonStyle   >   ::= 
                CaseSensitivity_AccentSensitivity 
                [_KanatypeSensitive   [_WidthSensitive   ]   ] 
                ¦   _BIN 

参数 
CollationDesignator 

指定   Windows   排序规则使用的基本排序规则。基本排序规则包括: 

当指定按字典排序时应用其排序规则的字母表或语言


用于存储非   Unicode   字符数据的代码页。 
例如   Latin1_General   或法文,两者都使用代码页   1252,或土耳其文,它使用代码页   1254。 

CaseSensitivity

CI   指定不区分大小写,CS   指定区分大小写。

AccentSensitivity

AI   指定不区分重音,AS   指定区分重音。

KanatypeSensitive

Omitted   指定不区分大小写,KS   指定区分假名类型。

WidthSensitivity

Omitted   指定不区分大小写,WS   指定区分大小写。

BIN

指定使用二进制排序次序。 


如果你只是目前查询区分,那么还是不要这样改,免得又反悔,如此查询:
select   *   from   a 
/*
a_nam             a_add           
----------   ---------- 
1                     aa
1                     bb
2                     cc
2                     vv
2                     kk
3                     dd
3                     ee
4                     dd
5                     ee
6                     yy
6                     yy

(11   row(s)   affected)
*/
现在我们查询a_add   =   'aa'的,'Aa'等等不行!
Example   1:

select   *   from   a 
where   a_add   collate   Chinese_PRC_CS_AS_WS   =   'aa' 
/*
a_nam             a_add           
----------   ---------- 
1                     aa

(1   row(s)   affected)
*/

Example   2:

select   *   from   a 
where   a_add   collate   Chinese_PRC_CS_AS_WS   =   'Aa' 
/*
a_nam             a_add           
----------   ---------- 

(0   row(s)   affected)
*/

方法三.上面的记不住,那么就用最笨的方法,转化为ascii
select   *   from   a
where 
ascii(substring(a_add,1,1))   =   ascii(substring('Aa',1,1))
and 
ascii(substring(a_add,2,1))   =   ascii(substring('Aa',2,1))
/*
a_nam             a_add           
----------   ---------- 

(0   row(s)   affected)
*/

方法三:任何版本都可以
select   *   from   a 
where   cast(a_add   as   varbinary(10))=   cast('aa'   as   varbinary(10))




本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/syc0616/archive/2008/12/25/3593526.aspx
分享到:
评论

相关推荐

    整理一下SQLSERVER的排序规则

    SQL SERVER的排序规则平时使用不是很多,也许不少初学者还比较陌生,但有 一个错误大家应是经常碰到: SQL SERVER数据库,在跨库多表连接查询时,若两数据 库默认字符集不同,系统就会返回这样的错误: “无法...

    MySQL表排序规则不同错误问题分析

    就是说两个表的排序规则(COLLATION)不同,无法完成比较。COLLATION是用在排序,大小比较上,一个字符集有一个或多种COLLATION,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二进制)结束。在做比较时,...

    数据分页程序完全解决方案(含普通分页/分段分页/原始分页/since_id分页)

    8) 要使用since_id方式模拟快照, 其数据集排序规则必须有能够唯一标识其每一个数据的字段(可能是复合的) 4. 实现思路 1) 提供SQL的转换函数 2) 支持分段式分页(page, page_ping, ping, ping_size), 传统分页(page...

    SQL语法大全

    SQL语法大全 SQL语法大全 1. ASP与Access数据库连接: dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access ...

    数据库系统概论-实验一.doc

    ) 实验内容: 一、写出实验内容步骤及完成情况以及出现问题及解决方案 如:安装SQL Server 2005企业版、注册服务器的管理等操作 SQL Sever 2005企业版的安装: 1. 安装Internet信息服务(IIS) Windows系统默认安装...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    6.2.6 使用计划信息来解决问题 161 6.3 小结 169 第7章 高级分组 170 7.1 基本的GROUP BY用法 171 7.2 HAVING子句 174 7.3 GROUP BY的“新”功能 175 7.4 GROUP BY的CUBE扩展 175 7.5 CUBE的实际应用 179 ...

    数据库系统概述.doc

    初步掌握:用三级封锁协议解决并发操作中的数据不一致问题。 初步掌握:用两段锁协议保证并发操作的可串行化。 第6章 关系数据库设计理论 【考试目的】 考核考生对关系模式设计中可能出现的问题及其产生原因以及...

    Sybase数据库培训教材.doc

    3.4 集函数、分组与排序 23 第4章 数据库、数据库对象的增、删、改 25 4.1 数据库 25 4.2 表 25 4.3 索引 26 4.4 默认 27 4.5 规则 27 4.6 视图 28 4.7 存储过程 28 4.8 触发器 29 第5章 批处理和流控制语言 31 5.1 ...

    74cms 骑士人才系统 v4.1.23 正式版 人才招聘系统源码

    修正 微信图文消息头条大图上传路径与调取路径不一致问题 修复 登录情况下点击申请职位出现快速登录窗口的问题 修复 下订单短信通知无法发送问题(阿里大于) 修复 后台选择原始链接后,部分页面显示伪静态问题 修复...

    DM8_SQL语言使用手册.pdf

    第 1 章 结构化查询语言 DM_SQL 简介 ....................................................................1 1.1 DM_SQL 语言的特点 ............................................................................

    Oracle9i的init.ora参数中文说明

    如果设置为 FALSE, 将执行 PL/SQL V3 行为, 而不允许 V2 行为; 否则在运行 PL/SQL V3 时将接受某些 PL/SQL V2 行为。 值范围: TRUE | FALSE 默认值: FALSE plsql_native_make_utility: 说明: 指定 make 实用程序 ...

    asp.net知识库

    第2章 并发操作的一致性问题 (2) Using sqlite with .NET Visual Studio 2005 中的新 DataSet 特性 MySQL 和 .Net2.0配合使用 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable 与DotNet数据对象...

    oracle详解

    导入/导出是ORACLE幸存的最古老的两个命令行工具,其实我从来不认为Exp/Imp是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物理...

    mysql8中文参考手册

    安装和升级数据库,mysql安全,备份和恢复,字符集排序规则 ,sql语句语法。INnoDb存储引擎、 mysql数据字典、替代存储引擎,分布。mysql性能模式。连接器和api,sql模式指标 状态变量指标。系统变量指标。事务的...

    java面试800题

    Q0042 Java的值传递的规则? Java基本类型的都是值传递,对象使用的都是引用传递 Q0043 java相关概念 "static:静态,无需实例化,可直接引用,全局只有一份copy,修饰变量和方法 final:最终的,不可继承、不可修改...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第1/2部分)

    第9章 使用SQL检索、限制和排序数据 305 9.1 列出SQL SELECT语句的功能 306 9.1.1 SQL SELECT语句的介绍 306 9.1.2 DESCRIBE表命令 306 9.1.3 SELECT语句的功能 307 9.1.4 数据规范化 308 9.2 创建演示模式 ...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

    第9章 使用SQL检索、限制和排序数据 305 9.1 列出SQL SELECT语句的功能 306 9.1.1 SQL SELECT语句的介绍 306 9.1.2 DESCRIBE表命令 306 9.1.3 SELECT语句的功能 307 9.1.4 数据规范化 308 9.2 创建演示模式 ...

Global site tag (gtag.js) - Google Analytics