Oracle字符集问题求助

海天一树 2014-09-12 05:13:08
Oracle字符集问题求助


环境:
在虚拟机装Redhat5 + Oracle 11g作为服务器端
在Win7中免安装版的PL/SQL Developer和免安装版的Oracle客户端instantclient-basic-win32-11.2.0.1.0
服务器端中的NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
Win7的系统环境变量中添加NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

操作步骤:
1)服务器端创建表
create table test_table(id int, name varchar2(20));
插入数据并提交
insert into test_table values(1, '张三');
commit;

2)Win7用PL/SQL Developer连接服务器端,且执行
insert into test_table values(2, '李四');
commit;

3)在服务器端查询
select * from test_table;
显示结果
ID NAME
---------- --------------------
2 ???
1 张三

4)在Win7的PL/SQL Developer中查询
select * from test_table;
显示结果
2 李四
1 寮犱笁

问题:
看现象,是服务器端和客户端互相不认得对方的汉字,但不知道具体原因在哪里。这个问题困扰我多时了,请各位大神帮忙看一下。
...全文
586 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuyeyi 2014-12-12
  • 打赏
  • 举报
回复
服务区器读取的是服务器的字符集, 而cmd 读的其实才是客户端也就是client的字符集。 plsql读取的是自己的字符集(在注册表中),所以你应该修改注册表中的字符集。
ning_wnn2014 2014-12-11
  • 打赏
  • 举报
回复
这个涉及到oracle字符集的问题若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:   SQL>STARTUP MOUNT;   SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;   SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;   SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;   SQL>ALTER DATABASE OPEN;   SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; //跳过超子集检测   SQL>ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK; 这一行不起作用,执行后出错ORA-00933: SQL 命令未正确结束,不过执行上一行命令已经生效,不用担心,继续下面操作。   SQL>SHUTDOWN IMMEDIATE;   SQL>STARTUP 执行完后检测是否成功: sql>select userenv('langvage') from dual,
yuyeyi 2014-11-17
  • 打赏
  • 举报
回复
select userenv('language') from dual; 查看服务器的字符集, 然后再注册表里面修改本地字符集,一样的话基本没问题。
riskyvall 2014-11-17
  • 打赏
  • 举报
回复
二楼的方法不行 删除重新安装
小麻雀NG 2014-11-14
  • 打赏
  • 举报
回复
这个涉及到oracle字符集的问题若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:
  SQL>STARTUP MOUNT;
  SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
  SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
  SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
  SQL>ALTER DATABASE OPEN;
  SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; //跳过超子集检测
  SQL>ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;
这一行不起作用,执行后出错ORA-00933: SQL 命令未正确结束,不过执行上一行命令已经生效,不用担心,继续下面操作。
  SQL>SHUTDOWN IMMEDIATE;
  SQL>STARTUP
执行完后检测是否成功:
sql>select userenv('langvage') from dual,
如果出现以下图片所示情况就ok了

海天一树 2014-09-12
  • 打赏
  • 举报
回复
上面第3)步中?是被黑色的菱形包围着,由于论坛不允许那种字符,我改用?来表示。
代码下载地址: https://pan.quark.cn/s/ee8627e4e6d7 ABAP调试器是一种功能强大的工具,可用于在执行期间对ABAP代码进行检验。除了常规的核心功能(例如逐行运行代码以及检验变量、字段符号和引用的值)之外,它还提供了一些辅助性的特性,能够简化并压缩调试会话的时长。并非所有使用者都熟悉这些辅助特性。SAP ABAP调试器是处理和优化ABAP代码开发与维护工作的核心资源,它配备了多样的功能来协助开发人员在运行状态下进行检验和排除故障。此资源着重阐述了ABAP调试器的一些高级特性,涵盖了深入分析调用堆栈、系统级调试、更新会话调试以及提升调试效率的方法。 1. **深入分析调用堆栈**:除了常规的应用程序调试,开发人员有时需要对调用堆栈的内部层级进行深入调试,特别是在错误出现在异步执行的更新处理或系统级程序时。通过启用**系统级调试**,可以访问通常不公开的系统代码,但这也会导致调用堆栈的显著增加,因此需要审慎操作。 2. **系统级调试**:对于不含业务逻辑的系统级程序,开发人员通常无需进行调试。然而,在特定情形下,例如进行错误追踪时,可能需要进入系统代码。借助调试器的“系统调试启用/禁用”选项,可以赋予对系统程序的调试权限。 3. **更新会话调试**:在处理异步更新任务,例如持久化业务数据时,错误可能发生在更新任务内部。激活**更新会话调试**,在更新任务完成后,调试器将自动启动,展示执行路径。比如,在变更成本中心后,通过输入调试指令 "/h" 启动调试,保存后能够看到更新过程中的错误。 4. **分析调用堆栈**:在进行深入调试时,调用堆栈是至关重要的。通过分析调用堆栈,能够定位到引发问题的具体位置,如在VB_V2_NORMAL...

17,377

社区成员

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

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