我在Delphi6中使用ADOQuery的Post方式存储数据到数据库的NVarchar字段类型中,发现存进去后会自动补空格,比如我存的是“中文”,那么存到数据库中会自动变成"中文            ",后面一堆空格,这个问题请哪位告诉告诉我怎么解决??  
 
注意:  
1、请不要告诉我不用Post或者不用Nvarchar字段而用Varchar字段,我有不得已的原因必须这么作  
2、请不要告诉我使用Delphi7,我知道Delphi7没有这个问题,但我不能用Delphi7  
3、请不要告诉我取出来的时候再去Trim,我的这种字段非常多,每个字段Trim简直无法忍受  
 
请高手帮助解决,谢谢

解决方案 »

  1.   

    varchar,nvarchar等,后面的空格是不计的,之所以楼主看到有空格,仅仅只是楼主所使用的工具当中根本nvarchar的长度大小给出的一个格式,而并不是真的在数据库当中有那么些空格后缀,事实上,你想存还存不进去。对于数据库当中的信息如果觉得有问题,可以使用datalength来测试实际占用空间,也可以使用cast as nvarbinary或者convert来转换成16进制查阅。
      

  2.   

    vokeyliu(vokey) ( ) 信誉:100    Blog  2006-08-31 22:54:00  得分: 0  
       你是怎么检验他后面插入了空格的?别说你是直接在库字段里面看到的。
    你要在前台验证一下,把存进去的数据再取出来,看看是不是多了空格?
    我个人认为不可能有这种情况。我当然验证过,数据库里和程序读出来都有空格。我认为Borland也不会出现这种傻Bug,
    但实际情况确实如此,你们可以用Delphi6 + Nvarchar验证 unsigned(僵哥(为什么我会到这里来……)) ( ) 信誉:100    Blog  2006-08-31 23:13:00  得分: 0  
     
     
       varchar,nvarchar等,后面的空格是不计的,之所以楼主看到有空格,仅仅只是楼主所使用的工具当中根本nvarchar的长度大小给出的一个格式,而并不是真的在数据库当中有那么些空格后缀,事实上,你想存还存不进去。对于数据库当中的信息如果觉得有问题,可以使用datalength来测试实际占用空间,也可以使用cast as nvarbinary或者convert来转换成16进制查阅。
      
     
    varchar,nvarchar等,后面的空格是不计的,这个我当然知道,这是数据库的特性,我直接在数据库里么操作nvarchar是不会有空格的,但现在使用D6 + Post操作NVarchar就会自动加空格,所以我认为是D6的问题,而不是SQLServer的问题,我使用的是Delphi最普通的DataGrid作的测试。
    用DataLength测试也发现确实长度很大(几百)请各位高手帮忙看下这个问题,我不是菜鸟,所以不会出现菜鸟级别的错误。哪位高手能解决,我可以高分酬谢。谢谢!!!  
     
      

  3.   

    我的软件也是DELPHI6 + ADO 从来没有出现过这种问题
      

  4.   

    要注意nvarchar是unicode的,所以当你传送给数据库的不是unicode的空格(占两字节),而是由两个ANSI的空格组成的,那么就会有如此问题,DBGrid是不支持Unicode的.
      

  5.   

    呵呵~~你自己好好看看ADO的技术文档
      

  6.   

    如果采用三层的话可以考虑把中ResolveToDataSet设成True,虽然牺牲点效率,估计也能解决你的问题,其实这就是Delphi的一个bug。
      

  7.   

    unsigned(僵哥(为什么我会到这里来……)) ( ) 信誉:100    Blog  2006-9-1 15:06:52  得分: 0  要注意nvarchar是unicode的,所以当你传送给数据库的不是unicode的空格(占两字节),而是由两个ANSI的空格组成的,那么就会有如此问题,DBGrid是不支持Unicode的.谢谢,你的回答我觉得比较靠谱的答案,你是说DBGrid不支持Unicode?那么用普通的DBTextEdit可以支持吗?
      

  8.   

    谢谢,你的回答我觉得比较靠谱的答案,你是说DBGrid不支持Unicode?那么用普通的DBTextEdit可以支持吗?
    ======================================
    这里面的关键并不是是否支持的问题,如果不支持,而能正常转换仍然不会存在问题,只是目前我也仅只是凭猜测,我没有确实的测试结果。抱歉。