【997755.com澳门葡京】接头SQLSE福睿斯VELacrosse中的排序规则,SQL生僻字模糊查询

注意Vietnamese_CI_AS排序规则下的特殊字符大小敏感难题

注意Vietnamese_CI_AS排序规则下的特殊字符大小敏感难题

生僻字指在数据库默许的编码中不存
又称难字或冷僻字

在论坛发帖讲述那样四个情况:

 

 

一.SQL中国化工进出口总公司解生僻字录入乱码难题[调解列数据类型->由varchar改为NVA奥迪Q3CHA普拉多]

  通过SSMS向SQL Server
二〇〇六中插入汉语数据后,查询出来的结果是???,根本就不显得汉语。用图形化和Insert语句后结果也是一模一样,使用查询分析器操作,情形也是这么。

目前,在SQL
Server中相遇了Vietnamese_CI_AS排序规则的特殊字符的高低写敏感难点,是的,你从未看错,那句话并未语病(DBA老鸟懂的)。遇到那几个非凡意况的时候,作者也大跌近视镜,颠覆小编的部分常识,OK,闲话少说,大家来演示一下以此特殊情况下冒出的独特别情报形。

目前,在SQL
Server中遇见了Vietnamese_CI_AS排序规则的特殊字符的尺寸写敏感难题,是的,你未有看错,这句话并不曾语病(DBA老手懂的)。境遇那个新鲜情形的时候,作者也大跌近视镜,颠覆小编的壹部分常识,OK,闲话少说,大家来演示一下这几个尤其现象下出现的区别经常景况。

997755.com澳门葡京 1

  在去掉了录入有误的图景外,剩下能够解释的正是恋人在SQLSE奥迪Q五VE揽胜设置的排序规则有问题了。朋友在SQLSEVESportage贰零零陆中采纳的排序规则是SQL_Latin1_General_CP1_CI_AS,而不是能够准确显示简体汉字的两种排序规则:

 

 

2.生僻字模糊查询难题

  Chinese_PRC_BIN,

桑土策动测试情形:

预备测试境况:

  生僻字在Like与CharIndex实行模糊定位时
暗中认可解析为空,结果如下:

  Chinese_PRC_CI_AS,

 

 

  997755.com澳门葡京 2

  Chinese_PRC_CS_AS。

   
服务器排序规则(Server
Collation)         :  Latin一_General_CI_AS

   
服务器排序规则(Server
Collation)         :  Latin一_General_997755.com澳门葡京 ,CI_AS

 

  让爱人在将SQLSE奥迪Q伍VE奥德赛2005对应数据库上将排序规则改成Chinese_PRC_CI_AS,难题一挥而就。

【997755.com澳门葡京】接头SQLSE福睿斯VELacrosse中的排序规则,SQL生僻字模糊查询。   
数据库排序规则(Database
Collation)     
:  
Vietnamese_CI_AS

   
数据库排序规则(Database
Collation)     
:  
Vietnamese_CI_AS

怎么缓慢解决如下难题:  

  看看MS对排序规则的批注:排序规则调控 SQL Server 二〇〇五中的字符串物理存款和储蓄。排  序规则钦赐表示各个字符的位形式以及存款和储蓄和相比较字符使用的条条框框。

 

 

   一.是因为编码难点时有产生就得化解编码难题(万事从源头入手)

  也正是说,在SQLSERAV4VEPRADO中,排序规则实际上正是字符编码。(真不领会MS为何又搞出个排序规则那些词?997755.com澳门葡京 3)

只顾,唯有在那么些一定排序规则下才会产出那几个标题,希图好了测试蒙受后,大家先轻松聊几句关于排序规则的学问,SQL
Server里面包车型地铁排序规则其实是含有了字符集和排序规则各异东西,不像MySQL,字符集和排序规则概念和设置分开。假若你想查看有个别排序规则对应的字符集,那么就可用上边包车型客车SQL语句查看。如下截图所示:

瞩目,唯有在这一个一定排序规则下才会产出那一个主题材料,希图好了测试情况后,大家先轻巧聊几句关于排序规则的知识,SQL
Server里面包车型大巴排序规则其实是包括了字符集和排序规则各异东西,不像MySQL,字符集和排序规则概念和装置分开。若是你想查看有个别排序规则对应的字符集,那么就可用上面包车型地铁SQL语句查看。如下截图所示:

   二.熟知数据库排序规则

  在查询分析器内实践下边语句,能够博得SQL SE帕杰罗VEBMWX叁援救的持有排序规则。

   

   

    二.一:查询全部排序规则(SELECT  *
FROM fn_helpcollations();)

  select * from ::fn_helpcollations()

SELECT  COLLATIONPROPERTY('Vietnamese_CI_AS', 'CodePage')                AS CodePage ,

        COLLATIONPROPERTY('Vietnamese_CI_AS', 'ComparisonStyle')        AS ComparisonStyle ,

        COLLATIONPROPERTY('Chinese_PRC_CI_AS', 'CodePage')                AS CodePage ,

        COLLATIONPROPERTY('Chinese_PRC_CI_AS', 'ComparisonStyle')        AS ComparisonStyle ,

        COLLATIONPROPERTY('SQL_Latin1_General_CP1_CI_AS', 'CodePage')    AS CodePage ,

        COLLATIONPROPERTY('SQL_Latin1_General_CP1_CI_AS', 'ComparisonStyle') AS ComparisonStyle
SELECT  COLLATIONPROPERTY('Vietnamese_CI_AS', 'CodePage')                AS CodePage ,

        COLLATIONPROPERTY('Vietnamese_CI_AS', 'ComparisonStyle')        AS ComparisonStyle ,

        COLLATIONPROPERTY('Chinese_PRC_CI_AS', 'CodePage')                AS CodePage ,

        COLLATIONPROPERTY('Chinese_PRC_CI_AS', 'ComparisonStyle')        AS ComparisonStyle ,

        COLLATIONPROPERTY('SQL_Latin1_General_CP1_CI_AS', 'CodePage')    AS CodePage ,

        COLLATIONPROPERTY('SQL_Latin1_General_CP1_CI_AS', 'ComparisonStyle') AS ComparisonStyle

    eg:解析:Chinese_PRC_BIN ;

  排序规则名称由两部份构成,前半部份是指本排序规则所援助的字符集。

 

 

      Chinese_PEvoqueC为简体普通话UNICODE字符集

  如:Chinese_PRC_CS_AI_WS

 

 

      _BIN 二进制排序 
      _CI(CS) 是还是不是区分轻重缓急写,CI不区分,CS区分
      _AI(AS) 是或不是区分重音,AI不区分,AS区分   
      _KI(KS) 是不是区分假名类型,KI不区分,KS区分 
        _WI(WS) 是或不是区分宽度 WI不区分,WS区分

  前半部份:指UNICODE字符集,Chinese_PRC_指南针对陆上简体字UNICODE的排序规则。

997755.com澳门葡京 4

997755.com澳门葡京 5

    
即在询问时 将日前列转化为对应的编码排序规则就能消除问题.(其中COLLATE是五个子句,可利用于数据库定义或列定义以定义排序规则,或行使于字符串表明式以应用排序规则投影)

  排序规则的后半部份即后缀含义:

 

 

997755.com澳门葡京 6

  _BIN 二进制排序

 

 

 

  _CI(CS) 是不是区分轻重缓急写,CI不区分,CS区分

 

 

  _AI(AS) 是不是区分重音,AI不区分,AS区分   

 

 

  _KI(KS) 是或不是区分假名类型,KI不区分,KS区分 

 

 

  _WI(WS) 是还是不是区分宽度 WI不区分,WS区分 

 

 

  区分轻重缓急写:要是想让相比较将大写字母和小写字母视为不等,请选用该选项。

 

 

  区分重音:倘使想让比较将重音和非重音字母视为不等,请选用该选项。要是选取该选取,相比还将重音分化的假名视为不等。

 

 

  区分假名:借使想让相比较将片假名和平假名马耳他语音节视为不等,请选用该选项。

 

 

  区分宽度:要是想让对比将半角字符和全角字符视为不等,请选用该选项.

 

 

  明白了SQLSERubiconVE君越中的排序规则后,对于上述难点,能够汲取以下结论:

 

 

  一:修改SQLSELANDVER用户数据库为支撑普通话字符集的排序规则。

Code Page

Language

 

932

Japanese

日语

936

Simplified Chinese

简体中文

949

Korean

韩文

950

Traditional Chinese

繁体中文

1258

Vietnamese

越南语

Code Page

Language

 

932

Japanese

日语

936

Simplified Chinese

简体中文

949

Korean

韩文

950

Traditional Chinese

繁体中文

1258

Vietnamese

越南语

  贰:对于存在汉字展现??,同时又不想退换数据库上的排序规则,又想要正确显示出汉字的话,提出在规划时整个使用Unicode类型字段,也正是那个以N伊始的字段类型,举例nChar,nVarchar,才方可正确显示汉字。

 

 

  3:如若不想更动排序规则,又不想改换字段类型,那么快要改换SQL语句,对于具有的方块字,前边也要加上N才能够精确突显。具体的方式请参见上面两条语句:

从上得以见到Chinese_PRC_CI_AS的编码为936,固然对编码相比熟练的就很明亮,不过恐怕也有局地对那么些不太领悟。上面轻易述说一下,

从上得以看出Chinese_PRC_CI_AS的编码为93陆,假使对编码相比较熟练的就很领悟,不过只怕也有一些对这么些不太通晓。上边简单述说一下,

  查询:select * from tb_Cust where FirstName=N’汪’

 

 

  插入:insert tb_Cust(FirstName,LastName,Sex)
values(N’汪’,N’鑫昊’,N’男’)

 

 

 所谓代码页(code
page)正是指向一种语言文字的字符编码。举例GBK的code page是CP93六,BIG五的code page是CP950,GB231二的code page是CP2093陆。

 所谓代码页(code
page)正是针对1种语言文字的字符编码。举例GBK的code page是CP936,BIG五的code page是CP950,GB231二的code page是CP2093陆。

 

 

 GBK是国标GB2312基础上扩大容积后至极GB231二的正式。GBK的文字编码是用双字节来代表的,即无论中、英文字符均使用双字节来表示,为了分裂中文,将其最高位都设定成一。GBK包涵全体国语字符,是国家编码,通用性比UTF八差,然则UTF捌占用的数据库比GBK大。

 GBK是国标GB231二基础上扩大容积后异常GB231二的正式。GBK的文字编码是用双字节来代表的,即无论是中、英文字符均使用双字节来表示,为了分歧汉语,将其最高位都设定成1。GBK包罗全体国语字符,是国家编码,通用性比UTF八差,可是UTF8占用的数据库比GBK大。

 

 

UTF-八:Unicode
TransformationFormat-八bit,允许含BOM,但经常不含BOM。是用于缓慢解决国际上字符的1种多字节编码,它对英文使用五个人(即3个字节),汉语使用贰二位(多个字节)来编码。UTF-八包罗全球全数国家急需利用的字符,是国际编码,通用性强。UTF-八版本纵然有着非凡的国际包容性,但汉语供给比GBK/BIG5本子多占用一半的数据仓库储存款和储蓄空间。

UTF-八:Unicode
TransformationFormat-8bit,允许含BOM,但普通不含BOM。是用于缓和国际上字符的一种多字节编码,它对英文使用八位(即一个字节),汉语使用25人(五个字节)来编码。UTF-⑧包蕴整个世界享有国家急需运用的字符,是国际编码,通用性强。UTF-八版本即使具有得天独厚的国际包容性,但中文须要比GBK/BIG5版本多占用百分之五10的数据仓库储存款和储蓄空间。

 

 

排序规则的后半部份即后缀
含义:

排序规则的后半部份即后缀
含义:

_BIN           
钦定使用向后分外的2进制排序依次。

_BIN           
内定使用向后十分的2进制排序依次。

_BIN二     
  
钦命使用 SQL Server 200伍 中引进的码位相比语义的2进制排序依次。

_BIN二     
  
内定使用 SQL Server 2005 中引进的码位比较语义的2进制排序依次。

_Stroke    

_Stroke    

按笔划排序

按笔划排序

_CI(CS)    

_CI(CS)    

是还是不是区分轻重缓急写,CI不区分,CS区分(case-insensitive/case-sensitive)

是否区分轻重缓急写,CI不区分,CS区分(case-insensitive/case-sensitive)

_AI(AS)    

_AI(AS)    

是或不是区分重音,AI不区分,AS区分(accent-insensitive/accent-sensitive)

是否区分重音,AI不区分,AS区分(accent-insensitive/accent-sensitive)

_KI(KS)    

_KI(KS)    

是或不是区分假名类型,KI不区分,KS区分(kanatype-insensitive/kanatype-sensitive)

是或不是区分假名类型,KI不区分,KS区分(kanatype-insensitive/kanatype-sensitive)

_WI(WS)    

_WI(WS)    

是或不是区分全半角,
WI不区分,WS区分(width-insensitive/width-sensitive)

是还是不是区分全半角,
WI不区分,WS区分(width-insensitive/width-sensitive)

 

 

好了,轻松概述了壹部分关于编码和字符集的文化。那么我们来看看Vietnamese_CI_AS的Code
Page为125捌,那个是匈牙利(Hungary)语言的一个字符集,很几个人大概未有用过那几个,可是未有涉及。那么大家先来探视难题。希图测试景况和数码,如下所示

好了,轻松概述了部分有关编码和字符集的文化。那么大家来探望Vietnamese_CI_AS的Code
Page为125八,那个是保加利亚语言的三个字符集,很三人唯恐未有用过这一个,可是未有关系。那么大家先来探视问题。希图测试情形和数据,如下所示

 

 

 

 

 

 

USE  TEST;

USE  TEST;

GO

GO

 

 

CREATE
TABLE TEST (name NVARCHAR(12));

CREATE
TABLE TEST (name NVARCHAR(12));

 

 

INSERT
INTO TEST

INSERT
INTO TEST

SELECT
N’lienht’ UNION ALL

SELECT
N’lienht’ UNION ALL

SELECT
N’LienHT’ UNION ALL

SELECT
N’LienHT’ UNION ALL

SELECT
N’LienHt’

SELECT
N’LienHt’

 

 

 

 

SELECT
* FROM TEST WHERE name =’lienHt’;

SELECT
* FROM TEST WHERE name =’lienHt’;

SELECT
* FROM TEST WHERE name =’lienht’

SELECT
* FROM TEST WHERE name =’lienht’

SELECT
* FROM TEST WHERE name =’LIenht’

SELECT
* FROM TEST WHERE name =’LIenht’

SELECT
* FROM TEST WHERE name =’LIeNht’

SELECT
* FROM TEST WHERE name =’LIeNht’

 

 

 

 

 

 

997755.com澳门葡京 7

997755.com澳门葡京 8

 

 

997755.com澳门葡京 9

997755.com澳门葡京 10

 

 

 

 

如上测试截图所示,只有N、H或NH的组合会出现大小写敏感难点,其余字符未有那种气象,测试的时候,确实是颠覆笔者的三观,相当的惊讶和茫然,然后自身测试了分歧排序规则,以及差别数据库版本,开掘这么些只在服务器排序规则为Latin一_General_CI_AS,数据库排序规则为Vietnamese_CI_AS,不管是SQL
Server 二零零六、SQL Server 二零一一、 SQL Server
201肆都会油不过生那一个主题素材。英特网查找并未过多材质,并不曾什么答案,估摸跟Vietnamese的编码有涉及,这一个bug是同事在越南社会主义共和国的类型碰到并发出来的。其余,在英特网也开掘有接近的求救

。遭受有如此场景的就要求相当小心了。解决方案,服务器排序规则和数据库排序规则平等分明能够幸免那么些主题素材,其余一时化解方案正是在SQL语句中钦定排序规则,如下所示:

如上测试截图所示,只有N、H或NH的组合会出现大小写敏感难点,其余字符未有那种气象,测试的时候,确实是颠覆俺的三观,分外的奇怪和茫然,然后自个儿测试了分化排序规则,以及不一致数据库版本,开采那么些只在服务器排序规则为Latin一_General_CI_AS,数据库排序规则为Vietnamese_CI_AS,不管是SQL
Server 2010、SQL Server 2013、 SQL Server
201四都会产出这几个难题。网上寻觅并未过多资料,并未有怎么答案,估摸跟Vietnamese的编码有关系,那些bug是同事在越南社会主义共和国的等级次序境遇并发出来的。其它,在网络也发觉有像样的求救

。遇到有那样景况的就需求相当小心了。消除方案,服务器排序规则和数据库排序规则一样肯定能够幸免这些难点,别的目前消除方案便是在SQL语句中钦赐排序规则,如下所示:

 

 

 

 

 

 

997755.com澳门葡京 11

997755.com澳门葡京 12

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website