none
SQL7.0升级至SQL2005后,字符型变量的内容有时会出现乱码 RRS feed

  • 问题

  • 最近SQL7.0升级至SQL2005后,在客户端操作erp应用程序,如果字段是字符型varchar(n),写入的内容中如果有中文,对于同样的内容,有时写入会出现乱码,而有时又是正常的,找不到出错的规律,运用最简单的执行语句

    insert into 表 (字符型字段1, 字段2 ) values (  :@变量1,  :@变量2 ) 也是如此。

    SQL7.0是英文版 CODE PAGE:CP 936,操作系统WINDOWS NT中文版

     迁移到新环境SQL2005 sp4是中文版排序规则Chinese_PRC_CI_AS,操作系统WINDOWS 2008R2 SP1中文版

    请教各位老师,是什么原因,谢谢

    2012年10月10日 8:00

全部回复

  • 为什么不用UNICODE?
    2012年10月10日 9:22
  • 将表字段设置为支持Unicode数据的类型. 比如nvarchar,nchar等

    第二,在插入数据的时候使用Unicode写法

    比如
    insert into tabname(name) select N'事实上'


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    2012年10月10日 12:07
  • 如果这样的话,改动量实在太大了,有没有其他办法?

    2012年10月10日 15:10
  • 没实际测试过,不太好猜

    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2012年10月11日 0:56
  • 如果排序规则是排序规则Chinese_PRC_CI_AS,即使使用VARCHAR保存中文也应该是可以的。你每次出现乱码的中文是固定的吗?
    2012年10月11日 1:42
  • 使用下面的语句

    USE pratice
    ALTER TABLE dbo.testcolumn ALTER COLUMN a NVARCHAR(50)

    pratice是我的测试数据库


    给我写信: QQ我:点击这里给我发消息

    2012年10月11日 9:29

  • 给我写信: QQ我:点击这里给我发消息

    2012年10月11日 9:29
  • 我的表500条记录,如果表数据量大的话会慢一点

    给我写信: QQ我:点击这里给我发消息

    2012年10月11日 9:30
  • 如果你将排序规则改成非中文的你看看用VARCHAR是不是可以存储中文。
    2012年10月11日 12:11
  • 我困惑的是同一个内容在保存在varchar(n)字段时,有的时候是正确的,有的时候是不正确的,大部分情况是正确的,个别时候会出现乱码,出现的情况找不出规律。

    2012年10月12日 7:48
  • 是一些深笔字吗?


    给我写信: QQ我:点击这里给我发消息

    2012年10月12日 8:10
  • 我困惑的是同一个内容在保存在varchar(n)字段时,有的时候是正确的,有的时候是不正确的,大部分情况是正确的,个别时候会出现乱码,出现的情况找不出规律。


    那些内容却是一样吗?你可以用BINARY的函数比较一下,有些看起来是不一样的可能还真不一样。
    2012年10月12日 11:55
  • KEVINLIU2大侠你说的是这样吗?

    USE tempdb;
    GO
    CREATE TABLE #myTable (column1 int, column2 varchar(256));
    GO
    INSERT INTO #myTable SELECT 1, 'test' UNION ALL
    SELECT 2,'asdf' UNION ALL 
    SELECT 3,'qaqa'
    GO
    
    SELECT BINARY_CHECKSUM(*) from #myTable;
    GO
    UPDATE #myTable set column2 = 'TEST12' WHERE column1=1
    GO
    SELECT BINARY_CHECKSUM(*) from #myTable;
    GO
    
    --DROP TABLE #myTable
    

    结果:


    给我写信: QQ我:点击这里给我发消息

    2012年10月16日 16:02
  • msdn中的解释:

    BINARY_CHECKSUM (Transact-SQL)

    http://msdn.microsoft.com/zh-cn/library/ms173784.aspx


    给我写信: QQ我:点击这里给我发消息

    2012年10月16日 16:04
  • 呵呵 大侠不敢当,我也是初懂SQL,我是想BINARY_CHECKSUM比较一下具体的值是不是一样。
    2012年10月17日 1:14