- 浏览: 1884652 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (514)
- OPEN (41)
- WARN (33)
- EXPER (16)
- RESOURCE (7)
- TOOL (4)
- DWR (10)
- Struts1.x (10)
- Ibtais (18)
- MyEclipse (30)
- Sql Server (64)
- Tomcat (7)
- APACHE (4)
- JSP (18)
- SERVLET (6)
- ENGLISH (0)
- ECSide (8)
- JasperReports (7)
- JAVA (24)
- JS (42)
- XML (26)
- CVS (8)
- Mind (1)
- JQUERY (2)
- IBATIS (6)
- PROJECT (0)
- STRUTS2 (0)
- PROXOOL (0)
- SPRING (4)
- Hibernate (0)
- SSI (0)
- JBPM (11)
- FLEX (3)
- JSON (2)
- GWT (1)
- jeecms v3 (1)
- Flash (2)
- DATA (1)
- ORACLE (3)
- 查询oracle 中逗号分隔字符串中所有值 (1)
最新评论
-
小小西芹菜:
GoEasy web三步轻松实现web实时推送1. 引入goe ...
服务器推送技术 java -
kg_1997:
这个方法太棒了,可以不用to_date函数,实在是棒!!!
java/oracle日期处理 -
wodesunday:
:idea:
SQL的分段统计查询语句 -
wodesunday:
引用
SQL的分段统计查询语句 -
BlueSkator:
讲的有点浅,没有深入进去
tomcat需要的重新发布和重启服务器的几种情况
把程序部署到服务器上时,登陆系统老出问题,看下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
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
发表评论
-
Eclipse中HashMap/Hashtable出现警告Type safety本篇文章来源于:开发学院 http://edu.codepub.com 原文
2010-08-03 13:08 2220症状: Type safety: The method pu ... -
Content is not allowed in prolog.
2010-08-03 10:51 4252读取XML时出现错误: 2010-08-03 10:52:2 ... -
进程被死锁
2010-07-16 11:45 2390错误: 引用 2010-07-15 11 ... -
java.lang.UnsupportedClassVersionError: Bad version number in .class file
2010-05-13 20:11 1321tomcat启动报错,发现错误版本 、 严重: Error d ... -
Oracle: ORA-00911: 无效字符
2010-04-22 10:41 6852Oracle: java.sql.SQLException: ... -
解决 无法解析导入 javax.servlet.ServletContextEvent
2010-02-09 11:24 5301启动tomcat报错了: 严重: Error configu ... -
...NeedsRefreshException问题分析
2010-02-07 16:44 3841com.opensymphony.oscache.base. ... -
JVMTI_ERROR_NULL_POINTER(100)
2010-01-27 16:49 1980JDWP exit error JVMTI_ERROR_NUL ... -
Couldn't perform the operation prepareCall
2010-01-08 09:43 5571[code="sql"]- ... -
tomcat ClassNotFoundException
2010-01-05 10:49 1217严重: Exception starting filter ... -
javax.servlet.servletexception cannot find actionmappings or actionformbeans col
2010-01-03 11:22 1765异常:javax.servlet.ServletExcepti ... -
错误1111
2010-01-02 14:28 1936org.springframework.jdbc.Un ... -
Cannot resolve reference to bean 'pingFenRecService' while setting bean property
2010-01-02 11:23 5281玩转SSI时重启服务器报错,郁闷啦,怎么可能呢?还报配置出错. ... -
解决为'MM_CURSOR' 的游标已存在问题
2009-12-09 14:45 3881今天写了个存储过程,使用了两个游标,在数据库里实现嵌套多层循环 ... -
TOMCAT 6 警告:Parameters:Invalid chunk ignored 的解决
2009-12-08 11:04 1647编写程序后,重启tomcat,出现警告:Parameters: ... -
Ibatis : Attribute "*" must be declared for element type "result".
2009-11-25 16:29 4306整合一Ibatis,竟然报错了! Caused by: com ... -
在建立与服务器的连接时出错。在连接到 sql server 2005 时 在默认的设置下 sql server 不允许进行远程连
2009-11-24 15:21 43882今天连接数据库时突然 ... -
Ibatis :The error occurred while applying a parameter map.
2009-11-18 10:03 23376项目需求变更在修改源程序时,要涉及数据库变动,大刀阔斧一般之后 ... -
Myeclipse:resource is out of sync with the file system的解决办法
2009-11-13 17:50 3950引用在eclipse中,启动run on server时报错: ... -
Ibatis There is no WRITEABLE property named 'depName' in class 'com.ving.xzfw.vo
2009-11-12 18:20 10977ibatis 异常, 报了一大推 错误: Caused by ...
相关推荐
### 无法解决 equal to 操作的排序规则冲突 在处理SQL查询时,有时会遇到一...通过以上详细的解释和解决方案,我们可以有效地解决SQL Server中由不同排序规则引发的问题,从而确保查询能够顺利执行并返回正确的结果。
默认情况下,SQL的排序机制可能会导致中文字符按照其内部编码(通常是Unicode编码)进行排序,这与我们的预期(比如按照拼音或笔画顺序)可能不一致。本文将详细介绍如何在SQL中实现中文排序,特别是针对MSSQL2005及...
1. **数据一致性**:当多台服务器或不同版本的SQL Server之间进行数据交换时,如果排序规则不一致,可能会导致数据比较错误。 2. **国际化支持**:为了支持不同语言环境下的数据处理需求,可能需要更改默认的排序...
为了解决这个问题,可以在连接条件上明确指定一个共同的排序规则,例如`collate Chinese_PRC_CI_AI_WS`,这会使得两个表的比较基于同一个字符集和排序规则,从而避免冲突。 排序规则的名称由两部分组成:字符集和...
总之,解决SQL Server中的中文乱码问题需要关注数据库的排序规则设置,以及在数据传输和存储过程中保持编码的一致性。通过正确配置这些方面,可以确保中文数据在SQL Server环境中正常显示和处理。
SQL Server 服务器修改排序规则的方法 SQL Server 服务器修改排序规则的方法是指在 SQL Server 服务器中修改数据库环境的排序规则,以满足不同地区和语言的需求。本文将介绍如何修改 SQL Server 服务器的排序规则,...
- 在修改排序规则之前,需要确保所有相关的应用程序都支持新的排序规则设置,避免出现数据不一致的情况。 - 当数据库的排序规则被设置为区分大小写时,所有的SQL查询都必须严格按照字段名的大小写来书写,否则可能会...
其中,`collation_name`定义了用于表达式、列或数据库的排序规则名称,它可以是Windows排序规则名称或SQL排序规则名称。 **1.2 Windows排序规则名称与SQL排序规则名称** - **Windows排序规则名称**:这是Windows...
自定义排序的核心在于使用特定的SQL语法来改变查询结果的顺序,而不依赖于表本身的排序规则。常见的实现方式有两种: 1. **使用CASE WHEN语句**:通过CASE WHEN语句根据指定条件为每一行数据赋值,然后基于这些赋值...
当安装SQL Server时,如果默认的排序规则不支持特定语言,或者与应用系统中的编码不一致,就可能出现乱码。因此,在你的情况中,可能原有的排序规则不支持中文,导致中文字符无法正确显示。重新安装数据库并选择合适...
2. **选择正确的校对规则**:校对规则决定了字符串的排序规则以及是否区分大小写。这里推荐使用`gbk_chinese_ci`,表示按照简体中文排序,并且忽略大小写。 示例创建数据库的SQL语句如下: ```sql CREATE DATABASE...
- **数据迁移**:在迁移数据时特别注意字符集和排序规则的变更,以免导致数据不一致的问题。 #### 高级特性 MySQL还支持一些高级的字符集和排序规则配置特性,例如: - **校对文件**:使用自定义的校对文件来定义...
SQL Server的日志文件会随着事务的增多而不断增长,如果不及时清理,可能造成磁盘空间不足的问题,影响系统性能。SQLServer工具箱v1.3提供日志清除功能,可以安全地清除无用的日志记录,释放硬盘空间,同时保持...
而磁盘文件存储虽然解决了数据持久化的问题,但却带来了数据冗余、不一致、联系弱和缺乏安全控制的挑战。这正是数据库应运而生的原因。数据库通过统一的数据模型和管理机制,解决了这些问题,提供了数据的一致性、...
《Microsoft SQL Server 2005技术内幕:T-SQL查询的源代码》是一本深入探讨SQL Server 2005中T-SQL查询技术的专业书籍。T-SQL(Transact-SQL)是Microsoft SQL Server数据库管理系统中用于数据操作、查询、存储过程...
《Microsoft SQL Server 2008技术内幕:T-SQL查询》是一本深入探讨SQL Server 2008中T-SQL(Transact-SQL)查询的权威指南。T-SQL是微软SQL Server数据库管理系统的核心语言,用于数据操作、查询、存储过程编写以及...
Windows 排序规则是 Sql Server 的首选,因为它们提供了更多选项并且和微软 Windows 环境提供的支持一致。SQL 排序规则用于早期的 Sql Server 版本,并且提供了向后兼容性。 在实际应用中,我们可以在列定义中使用 ...