/*------------------------------------------------------------------------------------
/*欢迎转载,请保留本声明信息
/*作者:翁 彦 enhydraboy@yahoo.com.cn
/*------------------------------------------------------------------------------------ http://www.mscto.com
这是一个在我实际一个项目中遇到的问题。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%'
分享到:
相关推荐
在SQL Server数据库中,全角字符和半角字符的区别主要在于它们所占用的存储空间和显示的宽度。全角字符通常用于东亚语言,如中文、日文和韩文,每个字符占据两个字节,而半角字符(ASCII字符)则只占用一个字节。在...
下面是一个简单的C#代码示例,用于将输入字符串中的所有半角字符转换为全角字符: ```csharp private string ToSBC(string input) { char[] c = input.ToCharArray(); for (int i = 0; i ; i++) { if (c[i]...
在这个场景中,标题提到的是“由任意个全角或半角空格分隔开的任意长度的字符串”,这暗示了我们处理的是包含不同类型的空格(全角空格和半角空格)作为分隔符的情况。 全角空格和半角空格在字符编码上是有区别的。...
全角逗号在东亚语言中常见,其宽度为两个半角字符,编码通常为U+3002(在Unicode中)。而半角逗号只占一个字符宽度,编码为U+002C。在SQL Server中,解析器通常期望的是半角逗号,因此使用全角逗号可能会导致语法...
处理SQL Server中的全角字符问题需要综合运用多种技术和策略。通过正确设置字符集、指定排序规则、规范化处理以及定期维护数据库等方式,可以有效避免和解决全角字符带来的问题,从而提高数据的完整性和查询效率。
在给定的部分内容中,展示了一段SQL Server存储过程,用于将数据库中全角字符转换为半角字符。这段代码的核心在于使用了`REPLACE`函数和`PATINDEX`函数进行字符替换,同时利用了`UNICODE`函数获取字符的Unicode编码...
本篇将详细探讨SQL Server中的排序功能及其在拼音处理和全角半角字符处理中的应用。 首先,我们要了解SQL Server中的基本排序语句——`ORDER BY`。在SQL查询中,`ORDER BY`子句用于指定返回结果集的排序方式。例如...
SQL Server 的排序规则是根据特定语言和区域设置标准指定对字符串数据进行排序和比较的规则。在 SQL 查询语言中,order by 语句实现查询结果的排序,其语法规则为:order by <排序列名>[asc|desc]。但是,跨库多表...
4.2.2 全角与半角字符处理 120 第 5 章 编号处理 123 5.1 自动编号 123 5.1.1 IDENTITY 123 5.1.2 ROWGUIDCOL 129 5.2 手工编号 131 5.2.1 查表法 131 5.2.2 独立编号表法 135 5.2.3 随机...
收集整理的SQL Server自定义函数,原文地址:http://blog.csdn.net/maco_wang 1.去除字符串中的html标记及标记中的内容 2 2. 去除字符串中连续的分割符 4 3.求第一个字符串中第二个串的个数 ...38.全角半角转换函数 71
- **使用 T-SQL 语法**:在 SQL 查询分析器中执行查询时需要注意大小写和全角半角问题。示例如下: ```sql SELECT * FROM [LINK2ORACLE]..[ORACLE_USER_NAME].TABLE_NAME; ``` - **使用 PL/SQL 语法**:这种方式...
在SQL Server中,全角字符通常占用两个字节,而半角字符只占用一个字节。若需要进行全角到半角或半角到全角的转换,可以使用内置的ASCII和CHAR函数结合。例如,全角空格的ASCII码是12288,半角空格的ASCII码是32,...
- `_WidthSensitive`:指定排序规则是否区分全角和半角字符。 - `_BIN`:指定使用二进制排序次序。 4. **字符串操作函数** - **UPPER**:该函数用于将字符串转换为全部大写字母。例如: ```sql SELECT UPPER...
4.2.2 全角与半角字符处理 120 第 5 章 编号处理 123 5.1 自动编号 123 5.1.1 IDENTITY 123 5.1.2 ROWGUIDCOL 129 5.2 手工编号 131 5.2.1 查表法 131 5.2.2 独立编号表法 135 5.2.3 随机编号 ...
四、Sqlserver 中 Replace 函数用法 REPLACE 函数是用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式的方法。语法为: REPLACE ('string_expression1', 'string_expression2', 'string_...
非法字符串处理.sql │ ├─第04章 │ │ 4.1.5 在各种处理中应用排序规则的示例.sql │ │ 4.2.1 排序规则在拼音处理中的应用.sql │ │ 4.2.2 排序规则在全角与半角处理中的应用.sql │...
是否将全角字符和半角字符视为不同。 在SQL Server中,如果你需要处理多种语言的数据,使用nchar和nvarchar数据类型可以确保兼容Unicode字符。对于特定的项目,如涉及到中文、英文和其他语言,可以考虑使用不区分大...
│ │ 4.2.2 排序规则在全角与半角处理中的应用.sql │ │ │ └─其他 │ 生成GB2312汉字表.sql │ 生成GBK汉字表.sql │ 自动获取汉字笔画.sql │ ├─第05章 │ │ 5.1.1 SET IDENTITY_INSERT 中的几个问题.sql...