理解SQL SERVER中的排序规则,解决项目中无法正确显示中文字符的问题

原创 2012年03月28日 11:09:40

最近项目中遇到的问题如下:

1、在输入框中输入中文,如下

2、点击SAVE之后出现??,根本就不显示中文,效果如下:



        用图形化和Insert语句后结果也是一样,使用查询分析器操作,情况也是如此。

  在排除了录入有误的情况外,剩下可以解释的就是SQLSERVER的排序规则了。我们测试环境上SQLSEVER2005中使用的排序规则是SQL_Latin1_General_CP1_CI_AS,而不是可以正确显示简体汉字的三种排序规则:Chinese_PRC_BIN,Chinese_PRC_CI_AS,Chinese_PRC_CS_AS
在将SQLSERVER2005中将排序规则改成Chinese_PRC_CI_AS,问题解决。

  看看MS对排序规则的解释:MS是这样描述的:"在 Microsoft SQL Server中,字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存储和比较字符所使用的规则。"
       也就是说,在SQLSERVER中,排序规则实际上就是字符编码。(不明白MS为什么又搞出个排序规则这个词。)

       在查询分析器内执行下面语句,可以得到SQL SERVER支持的所有排序规则。    
select * from ::fn_helpcollations() 

        排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。
        如: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区分 
         区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。
         区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,比较还将重音不同的字母视为不等。
         区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。
         区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项

结论如下:
  • 对于存在汉字显示??,同时又不想更改数据库上的排序规则,又想要正确显示出汉字的话,建议在设计时全部使用Unicode类型字段,也就是那些以N开头的字段类型,比如nChar,nVarchar,才可以正确显示汉字。
  • 如果不想更改排序规则,又不想更改字段类型,那么就要更改SQL语句,对于所有的汉字,前面也要加上N才可以正确显示。具体的方法请参考下面两条语句:
   查询:
select * from ff_ording where wording1=N'中文'

   插入:
insert ff_ording(wording1,wording2,remark1) values(N'中文',N'中国',N'备注2')


SQL排序规则解决方法:无法解决 equal to 操作中的 **** 和 *******排序规则冲突

在执行SQL语句时,可能会遇到:“无法解决 equal to 操作中的 **** 和 *******排序规则冲突”一.错误分析:  这个错误是因为排序规则不一致造成的,我们做个测试,比如:create...
  • holyrong
  • holyrong
  • 2008年08月04日 21:27
  • 5154

无法解决 equal to 操作的排序规则冲突

今天测试Job时,在SQL中出现了个 “无法解决 equal to 操作的排序规则冲突”,百度了一下,才发现是两个表之间元素创建时排序规则不同,一个是collate Chinese_PRC_CI_AI...
  • oscarxie
  • oscarxie
  • 2006年09月27日 17:59
  • 2959

Sql Server排序规则的简介、选择、应用

 一、排序规则简介:什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server  中,字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存储和比较字符所使用的...
  • cxyyxc
  • cxyyxc
  • 2007年08月12日 22:28
  • 1897

表union时出现的排序规则问题

union表时出现Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CS_AS" and "SQL_Latin...
  • mathewsking
  • mathewsking
  • 2009年05月06日 11:13
  • 5174

面试问题某个项目中遇到过什么问题

这是面试官很喜欢问的一个问题,你是会刁难你的一个地方。如果你在项目中是核心解决了一些技术难题,那这个问题对你来说应该是很好回答的。你可以说出这个项目遇到的技术问题,以及你是怎么解决的。这种问题往往可以...
  • hxpjava1
  • hxpjava1
  • 2017年03月03日 19:45
  • 2235

项目中遇到的问题及解决思路

有时遇到一个小问题,但不知道解决方法,就晕死。最近就遇到了两个,开始头大,后来解决了,其实发现也没那么复杂,不过还是记录下来,以便以后遇到这样的问题,可以有所参考。    第一个问题,就是前段时间做D...
  • see_you_in_the_past
  • see_you_in_the_past
  • 2015年01月09日 15:43
  • 1239

理解SQLSERVER中的排序规则,解决无法正确显示中文字符的问题

看看MS对排序规则的解释:MS是这样描述的:"在 Microsoft SQL Server 2000 中,字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存储和比较字符所使用的规则...
  • supercube2
  • supercube2
  • 2010年06月15日 12:53
  • 507

sqlserver排序规则介绍以及修改

一、排序规则简介: 什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server  中, 字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存 储和比较字...
  • iamlihongwei
  • iamlihongwei
  • 2016年11月10日 11:17
  • 1953

理解SQLSERVER中的排序规则,解决无法正确显示中文字符的问题

在排除了录入有误的情况外,剩下可以解释的就是SQLSERVER的排序规则了。朋友在SQLSEVER2005中使用的排序规则是SQL_Latin1_General_CP1_CI_AS,而不是可以正确显示...
  • shawn08
  • shawn08
  • 2009年10月13日 18:17
  • 363

理解SQLSERVER中的排序规则,解决无法正确显示中文字

有朋友发帖子描述这样一个问题: 通过SSMS向SQL Server 2005中插入中文数据后,查询出来的结果是???,根本就不显示中文。 用图形化和Insert语句后结果也是一样,使用查询分析...
  • xieshan2007
  • xieshan2007
  • 2008年01月12日 13:02
  • 405
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:理解SQL SERVER中的排序规则,解决项目中无法正确显示中文字符的问题
举报原因:
原因补充:

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