当前位置: 代码迷 >> Sql Server >> 大大,关于SQL中的char()有关问题
  详细解决方案

大大,关于SQL中的char()有关问题

热度:42   发布时间:2016-04-24 10:04:31.0
请教各位大大,关于SQL中的char()问题
我在SQL2005中执行CHAR(ASCII(SUBSTRING('SYSTEM', 1, 1))+128)的时候返回的是?,但是在SQL2008中返回的是NULL,我试过用ISNULL去执行的时候,发现05下的值不是NULL值,这个问题导致我一个函数里最终返回值的差异,在05下能正确返回值,而在08下返回的就是NULL,我试过在08下加成IsNull(CHAR(ASCII(SUBSTRING('SYSTEM', 1, 1))+128),‘?’),发现返回的就变成都是?了,和05下返回的不一样,烦请各位大大释疑下,
------解决方案--------------------
就我的理解 我认为这个与SQL SERVER的三值逻辑有关系

CHAR(ASCII(SUBSTRING('SYSTEM', 1, 1))+128)=NULL

CHAR(ASCII(SUBSTRING('SYSTEM', 1, 1))+128) is null
是不一样的

至于三值逻辑 自己去BAIDU一下 很多这样的解释的
------解决方案--------------------
两边 ASCII(SUBSTRING('SYSTEM', 1, 1)) 的值是否一致?只有这个值不在 0~127 之间,结果才是 NULL。
是不是2008中是全角字符?

------解决方案--------------------
对比一下两边的排序规则,右键实例→属性→常规→【服务器排序规则】,但是08会有改变,不保证这些改变不影响你的结果
------解决方案--------------------
我试了一下
SELECT char(129),ascii(char(129)),nchar(129),unicode(nchar(129))

SQL Server 2000 结果是
                                  
---- ----------- ---- ----------- 
     NULL        ?            129 

SQL Server 2008 结果是
                                  
---- ----------- ---- ----------- 
NULL NULL        ?            129 

没办法了,改用 nchar/unicode 吧。
  相关解决方案