日期:2014-05-18  浏览次数:20367 次

sql中出现的字符问题
SELECT 
 case  
  when SATISFY_RESULT_ID=1 then 'Satisfied' 比如:写“你好” 查询结果就是 两个问号“??”
  when SATISFY_RESULT_ID=4 then 'Dissatisfied'
  when SATISFY_RESULT_ID=3 then 'Very dissatisfied'
  when SATISFY_RESULT_ID=2 then 'Very satisfied'
  when SATISFY_RESULT_ID=5 then 'In general'
  end 调查结果,
  sum(CASE WHEN REGION_NAME = 'East' THEN CONVERT(numeric(10,2),Counts) END) AS East, 
  sum(CASE WHEN REGION_NAME = 'North' THEN CONVERT(numeric(10,2),Counts) END) AS North, 
  sum(CASE WHEN REGION_NAME = 'South' THEN CONVERT(numeric(10,2),Counts) END) AS South, 
  sum(CASE WHEN REGION_NAME = 'West' THEN CONVERT(numeric(10,2),Counts) END) AS West ,
  Convert(numeric(10,2),sum(Counts)) as 总计
FROM View_Result  

看上面sql 如果我在 then 里面写中文 然后在得到结果里面 此列显示 就是问号,如果写英文跟数字 则就没有问号?请问这是什么问题啊?? 大神们 指点啊 
 

------解决方案--------------------
then N'你好'
------解决方案--------------------
NCHAR、NVARCHAR、NTEXT。这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。

所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar