不能准确按拼音排序,Server排序规则
分类:多线程

ASP.NET 写入数据库的中文,全部变成问号,这显然是编码的问题,解决办法,在数据库上右键 -> 属性 -> 选项 -> 排序规则选择“Chinese_PRC_CI_AS”,解决。

排序规则简介: 

在使用数据库的过程中,总会碰到一些特别的需求。有时候需要储存中文字符,区分大小写或者按照中文的比划顺序排序。这就涉及到了对数据库排列规则的选择。

详细

      在项目中,利用OrderBy/OrderByDescending, ThenBy/ThenByDescending这4个方法排序时,发现了这样的问题:在本机测试,能正确按拼音排序;但是放上服务器是,就不能正确的按拼音排序了。
      原来OrderBy/OrderByDescending, ThenBy/ThenByDescending中若是LinqToSql的话,就需要看下数据库机器得sql是否为中文版的?若数据库是英文版,就有可能出现不能正确的按拼音排序的情况,这时候,可以通过修改数据库属性来达到按拼音正确排序:打开SQL Server Management Studio,选择对应的数据库,右击选择属性(R),点击选项(Options),第一个排序规则(Collation),请选择 Chinese_PRC_CI_AS。

        什么叫排序规则呢?MS是这样描述的: "在   Microsoft   SQL   Server   2000   中, 
字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存 
储和比较字符所使用的规则。 " 
  在查询分析器内执行下面语句,可以得到SQL SERVER支持的所有排序规则。 

我们一般可以选择数据库名称--》右键属性(Properties)--》功能(optiotion)--》排序方式(Collation)选择。

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

 

    select   *   from   ::fn_helpcollations()   

* 由于没有中文版的数据库,中文翻译可能有误。

如:Chinese_PRC_CS_AI_WS

PS:

排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。 
如: 
  Chinese_PRC_CS_AI_WS   
前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。 
排序规则的后半部份即后缀   含义:   
  _BIN   二进制排序   
  _CI(CS)   是否区分大小写,CI不区分,CS区分 
  _AI(AS)   是否区分重音,AI不区分,AS区分    
  _KI(KS)   是否区分假名类型,KI不区分,KS区分  
        _WI(WS)   是否区分宽度   WI不区分,WS区分  

图片 1

前半部份:指 UNICODE 字符集,Chinese_PRC_ 指针对大陆简体字 UNICODE 的排序规则。(RPC People's Republic of China)

 排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。  
  如:  
    Chinese_PRC_CS_AI_WS    
  前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。  
  排序规则的后半部份即后缀   含义:    
    _BIN   二进制排序    
    _CI(CS)   是否区分大小写,CI不区分,CS区分  
    _AI(AS)   是否区分重音,AI不区分,AS区分     
    _KI(KS)   是否区分假名类型,KI不区分,KS区分    
       _WI(WS)  是否区分宽度   WI不区分,WS区分    
    
  区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。  
  区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,比较还将重音不同的字母视为不等。  
  区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。  
  区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项

区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。 
区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项, 
                  比较还将重音不同的字母视为不等。 
区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。
区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项 

 

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

解决办法:

那这些不同的排序方式究竟有什么区别呢?

  • _BIN 二进制排序
  • _CI(CS) 是否区分大小写,CI 不区分,CS 区分
  • _AI(AS) 是否区分重音,AI 不区分,AS 区分
  • _KI(KS) 是否区分假名类型 ,KI 不区分,KS 区分
  • _WI(WS) 是否区分宽度 WI 不区分,WS 区分。可以理解为是否区分全角半角。

  加上collate   Chinese_PRC_CI_AI_WS (统一规则)

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

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

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

  • _BIN 二进制排序
  • _CI(CS) 是否区分大小写,CI不区分,CS区分
  • _AI(AS) 是否区分重音,AI不区分,AS区分
  • _KI(KS) 是否区分假名类型,KI不区分,KS区分      
  • _WI(WS) 是否区分宽度 WI不区分,WS区分

区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。

区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,比较还将重音不同的字母视为不等。

区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。

区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项。

我们可以在系统函数sys.fn_helpcollations 查看到所有的排序规则。在SQL Server2014 中共有3887种。

select * from sys.fn_helpcollations()

 

除了改变整个数据库的排序方式外,我们还可以在使用order by的时候制定排序方式,如:

select * 
from [dbo].[cs_Appliction]  
order by [AppName] collate Chinese_PRC_CS_AS_KS_WS

本文由10bet手机官网发布于多线程,转载请注明出处:不能准确按拼音排序,Server排序规则

上一篇:网页做多宽,响应式开发中的图片处理 下一篇:没有了
猜你喜欢
热门排行
精彩图文