SQL> select value from V$NLS_PARAMETERS where parameter = 'NLS_CHARACTERSET';VALUE
----------------------------------------------------------------
ZHS16GBK已用时间:  00: 00: 00.00
SQL> select * from ta;        ID NAME
---------- ----------
         1 a
         2 a
         3 a
         2 a已用时间:  00: 00: 00.80
SQL> update ta 
  2  set name='樑 '
  3  where id=1;已更新 1 行。已用时间:  00: 00: 00.20
SQL> update ta set name='樑 '
  2  where id=1;已更新 1 行。已用时间:  00: 00: 00.10
SQL> select * from ta;        ID NAME
---------- ----------
         1 樑
         2 a
         3 a
         2 a已用时间:  00: 00: 00.40看你的提示信息以及后来能成功,肯定跟字符集没什么关系
我这里测试没发现什么异常

解决方案 »

  1.   

    谢谢楼上songzip,我忘了说明,两次update后面
    '樑' 
    '樑 ' 多了一个空格的你把最后的空格去掉试一试
      

  2.   

    谢谢bobo,我忘了说明,两次update后面
    '樑' 
    '樑 ' 多了一个空格的你把最后的空格去掉试一试
      

  3.   

    sorry,我换行给你造成了误会
      

  4.   

    我可不是bobo哈
    我注意到了,我也试过了,没有问题
    很奇怪的问题啊SQL> update ta
      2  set name='樑'
      3  where id=1
      4  /已更新 1 行。已用时间:  00: 00: 00.10
      

  5.   

    执行一下
    select chr(39109) from dual;
    看是不是那个字
    再执行
    update yk_job_info 
    set  user_name = chr(39109) 
    where register_no = '01542000070004'
    /
    看有没有问题
      

  6.   

    SQL> select value from V$NLS_PARAMETERS where parameter = 'NLS_CHARACTERSET';VALUE
    ----------------------------------------------------------------
    ZHS16CGB231280SQL> create table aa(id varchar2(1),name varchar2(10));Table createdSQL> insert into aa values('1','dd');1 row inserted
    SQL> update aa set name='樑 ';1 row updatedSQL> select * from aa;ID NAME
    -- ----------
    1  ?SQL> update aa set name='樑';1 row updatedSQL> select * from aa;ID NAME
    -- ----------
    1  ?变成了问号,与字符集有关
    ---------------------------------------------------------------
    SQL> select * from V$NLS_PARAMETERS where PARAMETER='NLS_LANGUAGE';PARAMETER                                                        VALUE
    ----------------------------------------------
    NLS_LANGUAGE                                                     AMERICANSQL> select * from aa;ID NAME
    -- ----------
    1  ?
      

  7.   

    兄弟们谢谢你们的参与,我查了一下1  server是ZHS16cGB2312802  当我的client也是ZHS16cGB231280时,简体中文没问题,繁体中文不能做字符串的结尾3  在client的注册表中改为ZHS16GBK时,可以用繁体操作了,但是由于与server字符集不同,所以select出的是??4  我没有敢改动server的字符集来测试,那不是闹着玩的。上午出现问题时,我也就直接让用户后面加空格了(我是无意发现的,因为它报单引号没结束)5  由于ZHS16GBK 是ZHS16CGB231280的超集,所以我怀疑是后者对这种情况处理不好
      

  8.   

    beckhambobo : 我觉得你的server是ZHS16cGB231280,而你的client是ZHS16GBK 就是我的第三种情况你可以把client注册表改为ZHS16CGB231280,这样你即使这样都会出错
    SQL> select '樑' from dual
      2  /
    ERROR:
    ORA-01756: quoted string not properly terminated还有:这仅仅是跟characterset有关,与language和TERRITORY没有关系的~~~
      

  9.   

    beckhambobo : 我觉得你的server是ZHS16cGB231280,而你的client是ZHS16GBK 就是我的第三种情况你可以把client注册表改为ZHS16CGB231280,这样你即使这样都会出错
    SQL> select '樑' from dual
      2  /
    ERROR:
    ORA-01756: quoted string not properly terminated还有:这仅仅是跟characterset有关,与language和TERRITORY没有关系的~~~
      

  10.   

    总结得很好啊
    不过你这样放入的数据恐怕不能正常显示
    刚才作了一下试验
    修改客户端字符集为ZHS16CGB231280
    inert into ta values(6,'樑 ');
    然后再改回ZHS16GBK
    SQL> select * from ta;        ID NAME
    ---------- ----------
             6 ??
             1 樑 
             2 a
             3 a
             2 a已用时间:  00: 00: 00.11
    SQL>
      

  11.   

    总结得很好啊
    不过你这样放入的数据恐怕不能正常显示
    刚才作了一下试验
    修改客户端字符集为ZHS16CGB231280
    inert into ta values(6,'樑 ');
    然后再改回ZHS16GBK
    SQL> select * from ta;        ID NAME
    ---------- ----------
             6 ??
             1 樑 
             2 a
             3 a
             2 a已用时间:  00: 00: 00.11
    SQL>
      

  12.   

    我的“空格法”显示很好的SQL> update test_table set b = '樑 '
      2  /1 row updated.SQL> commit;Commit complete.SQL> select * from test_table
      2  /       ID B
    --------- ----------
              樑 至于你举例的情况,我也不知道为什么。
    感谢参与,贴出一个极其good的地址以回报
    http://www.exzilla.net/docs/nls/oracleNLS01.php