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

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

/*作者:翁   彦   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%'

转载于:https://www.cnblogs.com/z-y/archive/2006/08/18/480917.html

SQL Server中全角和半角字符的比较问题相关推荐

  1. C#中全角转半角以及半角转全角

    半角指的是一个字符占用一个标准字符的位置.全角指一个字符占用两个标准字符位置的状态.在C#中,我们可以通过程序的方法,将相应的半角字符串信息转换为全角类型,也可以实现全角转半角功能. 相应封装好的方法 ...

  2. Java实现全角和半角字符相互转换

    平凡也就两个字: 懒和惰; 成功也就两个字: 苦和勤; 优秀也就两个字: 你和我. 跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美! 关注微信 ...

  3. Java全角、半角字符的关系以及转换

    如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对 ...

  4. java 全角_Java全角、半角字符的关系以及转换

    如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对 ...

  5. java全角数字_Java全角、半角字符的关系以及转换

    如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对 ...

  6. java 全角_java全角、半角字符的关系以及转换详解

    如果搞明白了Java中全角字符和半角字符之间的关系 那他们之间的转换根本就不是个事. 全角字符与半角字符的关系 可以通过下面的程序看看Java中所有字符以及对应编码的值 public static v ...

  7. Java 全角与半角字符的转换

    1.什么是全角和半角? -- 百度百科 1)全角(Full-width):是一种电脑字符,是指一个全角字符占用两个标准字符(或两个半角字符)的位置.全角占两个字节(16位). 汉字字符和规定了全角的英 ...

  8. C#中全角与半角的转换

    在程序设计中有时会遇到的全角和半角的字符,比如利用关键字查询某些信息,输入相同字符的全角和半角如果不进行处理就会造成获得的结果不相同.因此,在需要转换全角半角的地方下面两个函数会对你有所帮助. 转换依 ...

  9. java 日文全角转半角_java中全角转换为半角的方法

    在获取文本的时候,经常遇到数据格式的问题,需要判断或转换. 本文旨在解决全角符号转换为半角符号的问题. 网上大体有两种方法:转换编码或者替换. 我使用的是转换编码,引用自:http://blog.cs ...

最新文章

  1. Java8 Lambda总结
  2. 随想系列_4_从电影《可可西里》说起
  3. getprocaddress得到为0_基于ZU+系列MPSoC芯片的USB3.0/2.0接口硬件设计
  4. css中 Span 元素的 width 属性无效果原因及多种解决方案
  5. idea使用jrebel热部署插件
  6. python ray定时任务_python定时任务APScheduler
  7. OGNL表达式用法详解
  8. 利用python搭建socket server服务器
  9. 视频去水印 java_用java给视频水印LOGO
  10. 中国的比尔·盖茨-不得不令我佩服了
  11. 10个提供Logo设计灵感的创意网站
  12. HAL库自学笔记#1【通用TIM定时器】
  13. 向上沟通:你必须要注意的三个误区
  14. qcustomplot绘制柱状图
  15. 人工智能时代,教育革命迫在眉睫
  16. 高分7(GF7)卫星数据制作平原地区DSM/DEM(三)——可信度分割
  17. 性能测试之tcpcopy引流工具介绍
  18. 【微信小程序】 apache配置https,nginx配置https
  19. 两列布局(3种解决方案)
  20. 输出第三个单词c语言,基础c语言问题:要求输入任意单词,输出单词的每个字母后的第三个字母。例如输入yeah,则输出bhdk...

热门文章

  1. 掌握这个分析方法,数据分析就学会了一半
  2. 如何对报表的参数控件赋值
  3. java csv 数组_如何在Java中将JSON数组转换为CSV?
  4. vue 查看变量类型_Vue学习 开始走向VUE开发2---插值使用详解
  5. python脚本在centos系统一键卸载重新安装Mysql
  6. 蓝桥杯 2017年C语言混搭 C/C++
  7. Pyspider爬虫实例:1号店医药电商
  8. 【机器学习-西瓜书】三、线性回归;对数线性回归
  9. 【caffe】Caffe的Python接口-官方教程-01-learning-Lenet-详细说明(含代码)
  10. 牛客 2021年度训练联盟热身训练赛第二场 B题