很久没有问问题了,今天遇到一个,网上没有查到

shahand 2003-08-08 09:21:45
希望您能测试一下再回答

SQL> update yk_job_info
2 set user_name = '樑'
3 where register_no = '01542000070004'
4 /
ERROR:
ORA-01756: quoted string not properly terminated


SQL> update yk_job_info set user_name = '樑 '
2 where register_no = '01542000070004'
3 /

1 row updated.

SQL> select value from V$NLS_PARAMETERS where parameter = 'NLS_CHARACTERSET';

VALUE
----------------------------------------------------------------
ZHS16CGB231280
...全文
105 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
beckhambobo 2003-08-08
  • 打赏
  • 举报
回复
SQL> select value from V$NLS_PARAMETERS where parameter = 'NLS_CHARACTERSET';

VALUE
----------------------------------------------------------------
ZHS16CGB231280

SQL> create table aa(id varchar2(1),name varchar2(10));

Table created

SQL> insert into aa values('1','dd');

1 row inserted
SQL> update aa set name='樑 ';

1 row updated

SQL> select * from aa;

ID NAME
-- ----------
1 ?

SQL> update aa set name='樑';

1 row updated

SQL> select * from aa;

ID NAME
-- ----------
1 ?

变成了问号,与字符集有关
---------------------------------------------------------------
SQL> select * from V$NLS_PARAMETERS where PARAMETER='NLS_LANGUAGE';

PARAMETER VALUE
----------------------------------------------
NLS_LANGUAGE AMERICAN

SQL> select * from aa;

ID NAME
-- ----------
1 ?
bzszp 2003-08-08
  • 打赏
  • 举报
回复
执行一下
select chr(39109) from dual;
看是不是那个字
再执行
update yk_job_info
set user_name = chr(39109)
where register_no = '01542000070004'
/
看有没有问题
shuipipi 2003-08-08
  • 打赏
  • 举报
回复
不是吧,正常的中文字符的更新应该是没问题的~

要是真是像泥这种情况,还真邪门了!
bzszp 2003-08-08
  • 打赏
  • 举报
回复
我可不是bobo哈
我注意到了,我也试过了,没有问题
很奇怪的问题啊

SQL> update ta
2 set name='樑'
3 where id=1
4 /

已更新 1 行。

已用时间: 00: 00: 00.10
shahand 2003-08-08
  • 打赏
  • 举报
回复
sorry,我换行给你造成了误会
shahand 2003-08-08
  • 打赏
  • 举报
回复
谢谢bobo,我忘了说明,两次update后面
'樑'
'樑 '

多了一个空格的

你把最后的空格去掉试一试
shahand 2003-08-08
  • 打赏
  • 举报
回复
谢谢楼上songzip,我忘了说明,两次update后面
'樑'
'樑 '

多了一个空格的

你把最后的空格去掉试一试
bzszp 2003-08-08
  • 打赏
  • 举报
回复

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

看你的提示信息以及后来能成功,肯定跟字符集没什么关系
我这里测试没发现什么异常
shahand 2003-08-08
  • 打赏
  • 举报
回复
我的“空格法”显示很好的

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
bzszp 2003-08-08
  • 打赏
  • 举报
回复
总结得很好啊
不过你这样放入的数据恐怕不能正常显示
刚才作了一下试验
修改客户端字符集为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>
bzszp 2003-08-08
  • 打赏
  • 举报
回复
总结得很好啊
不过你这样放入的数据恐怕不能正常显示
刚才作了一下试验
修改客户端字符集为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>
shahand 2003-08-08
  • 打赏
  • 举报
回复
beckhambobo : 我觉得你的server是ZHS16cGB231280,而你的client是ZHS16GBK

就是我的第三种情况

你可以把client注册表改为ZHS16CGB231280,这样你即使这样都会出错
SQL> select '樑' from dual
2 /
ERROR:
ORA-01756: quoted string not properly terminated

还有:这仅仅是跟characterset有关,与language和TERRITORY没有关系的~~~
shahand 2003-08-08
  • 打赏
  • 举报
回复
beckhambobo : 我觉得你的server是ZHS16cGB231280,而你的client是ZHS16GBK

就是我的第三种情况

你可以把client注册表改为ZHS16CGB231280,这样你即使这样都会出错
SQL> select '樑' from dual
2 /
ERROR:
ORA-01756: quoted string not properly terminated

还有:这仅仅是跟characterset有关,与language和TERRITORY没有关系的~~~
shahand 2003-08-08
  • 打赏
  • 举报
回复
兄弟们谢谢你们的参与,我查了一下

1 server是ZHS16cGB231280

2 当我的client也是ZHS16cGB231280时,简体中文没问题,繁体中文不能做字符串的结尾

3 在client的注册表中改为ZHS16GBK时,可以用繁体操作了,但是由于与server字符集不同,所以select出的是??

4 我没有敢改动server的字符集来测试,那不是闹着玩的。上午出现问题时,我也就直接让用户后面加空格了(我是无意发现的,因为它报单引号没结束)

5 由于ZHS16GBK 是ZHS16CGB231280的超集,所以我怀疑是后者对这种情况处理不好

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧