SQL Server中全角和半角字符的比较问题

原创 2004年01月02日 13:45:00

/*------------------------------------------------------------------------------------

/*欢迎转载,请保留本声明信息

/*作者:翁      enhydraboy@yahoo.com.cn

/*------------------------------------------------------------------------------------

这是一个在我实际一个项目中遇到的问题。03BHL01001(上海)和03BHL01001(上海)比较的结果是一样的。导致引起的重复的主键问题。

03BHL01001(上海)和03BHL01001(上海)差别,就在于前者的括号是全角的括号字符,后者是半角的括号字符。全角的括号字符和半角的括号字符的ascii码显然是不一样的。全角的( ASCII码是0xA3A8 ,而半角的( 0x28。那么为什么SQL Server会认为是一样的呢?

问题其实就出在数据库的排序规则上,让我们在仔细研读一下SQL Server的文档。SQL Server的排序规则由这样几部分组成,代码页、区分大小写、区分重音、区分宽度。最后一个在SQL Server的联机帮助中没有进一步提及,其实本篇遇到的问题就是由于这个原因造成的。区分宽度:指定 SQL Server 区分相同字符的单字节表示法(半角)和双字节表示法(全角)。如果没有选择,则 SQL Server 将认为相同字符的单字节表示法和双字节表示法等效。

缺省,安装SQL Server中文版的时候,SQL Server帮你选择的排序规则是Chinese_PRC_CI_AS(Chinese-PRC, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive),是中文,不区分大小写、区分重音、不区分假名、不区分宽度。因此,自然就认同03BHL01001(上海)=03BHL01001(上海)

所以,正确的选择应该是,后缀为WS的中文排序规则。本例中我们应该选择Chinese_PRC_CI_AS_WS

我们来看一下,指定排序规则是Chinese_PRC_CI_AS_WS后,怎么样了?

 

select 1 where '03BHL01001(上海)'='03BHL01001(上海)'

collate Chinese_PRC_CI_AS_WS

 

-----------

 

(所影响的行数为 0 行)

看来这个问题解决了。

重要提示:

如何察看使用那个排序规则呢?可以使用下面的SQL语句。

SELECT *

FROM ::fn_helpcollations()

可以查询所有排序规则的信息。

查出所有中文排序规则的信息

SELECT * FROM

(

SELECT *

FROM ::fn_helpcollations()) A

WHERE name like 'Chinese%'

 

中文输入法中的全角和半角的区别

摘自:http://blog.csdn.NET/kevinhg/article/details/8702462 在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为"...
  • XianRenShan
  • XianRenShan
  • 2017年07月30日 16:12
  • 1779

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

 --1.查询区分全角与半角字符 --测试数据 DECLARE @t TABLE(col varchar(10)) INSERT @t SELECT 'aa' UNION ALL SEL...
  • bear_79
  • bear_79
  • 2014年10月16日 15:38
  • 478

SQL SERVER不认全角和半角

 不管是c/s还是b/s的开发模式,随着window操作系统的不断深入人心,其日渐强大的数据库SQL SERVER也逐渐被大家所认可。 在一次偶然的错误处理中,发现居然全角字符和半角字符都能通过SQL...
  • htitzx
  • htitzx
  • 2005年05月25日 16:20
  • 1074

SQLSERVER中的全角和半角

/*--全角/半角转换 转换说明 全角字符从的unicode编码从65281~65374 半角字符从的unicode编码从 33~126 空格比较特殊,全角为 12288,半角为 ...
  • zuke123456
  • zuke123456
  • 2012年01月21日 12:15
  • 534

SQL SERVER 全角和半角的解决方法

今天在开发项目当中遇到了一个非常郁闷的问题,导致我的更新总是屡屡失败,数字全角半角的问题update corptax set corptax.mandep = c.SALECOMPANYfrom co...
  • shashawang
  • shashawang
  • 2009年04月15日 12:43
  • 398

SQL Server中全角和半角字符的比较问题

这是一个在我实际一个项目中遇到的问题。03BHL01001(上海)和03BHL01001(上海)比较的结果是一样的。导致引起的重复的主键问题。 03BHL01001(上海)和03BH...
  • turejackon
  • turejackon
  • 2012年10月18日 16:13
  • 644

asp.net中全角与半角的操作

Asp.net中半角与全角操作一、半角与全角之间的转化    ///     /// 半角转全角    ///     ///     ///     static public string Get...
  • Teng_s2000
  • Teng_s2000
  • 2007年05月21日 16:13
  • 1773

如何设置Sql Server数据库查询时区分大小写和全角半角

zhuanzai 开发中常用的数据库有Oracle和Sql Server,Oracle数据库在查询的时候是有大小写区分的,而Sql Server数据库则不区分大小写,如何使Sql Server数据库...
  • lingxyd_0
  • lingxyd_0
  • 2014年04月21日 10:35
  • 4207

SQLServer查找全角字符

select 1 where '03BHL01001(上海)'='03BHL01001(上海)' collate Chinese_PRC_CI_AS_WS ...
  • limlimlim
  • limlimlim
  • 2014年05月30日 16:40
  • 2902

sql 全角字符,半角字符查询

将常用半角转化为全角:  select   nchar(65248+unicode( '半角字符 '))  上面这个方法如果unicode里面的不是半角字符是全角字符的话就会返回null,然后我们...
  • zhou_xuexi
  • zhou_xuexi
  • 2012年02月14日 16:44
  • 2069
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server中全角和半角字符的比较问题
举报原因:
原因补充:

(最多只允许输入30个字)