linux上操作ORACLE时不论是insert还是select,都出现乱码。网上查了不少,都没解决。 哪位达人帮帮我。

2024-12-29 03:20:06
推荐回答(6个)
回答1:

【解答】
根据上面配置
=>
linux-LANG :en_US.UTF-8 终端字符集
oracle-database :AMERICAN_AMERICA.WE8ISO8859P1 数据库字符集
oracle-NLS_LANGUAGE :AMERICAN_AMERICA.WE8ISO8859P1 客户端字符集

解决上面提到的2>a>乱码并保持状态1>a>:
需要达到目标配置:
=>
linux-LANG :en_US.UTF-8 终端字符集
oracle-database :AMERICAN_AMERICA.UTF8 数据库字符集
oracle-NLS_LANGUAGE :AMERICAN_AMERICA.UTF8 客户端字符集

【操作】
1> 修改 数据库字符集 INTERNAL_USE
[oracle@localhost ~]$ sqlplus / as sysdba
(若此时数据库服务器已启动,则先执行 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 ZHS16GBK;
SQL>ALTER DATABASE national CHARACTER SET INTERNAL_USE UTF8;
(提示:INTERNAL_USE 可以绕过超集的约束检查)
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP

补充:
a>超集约束检查
SQL>alter database character set zhs16gbk
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set

b>查询数据库字符集(dba)
SQL>select * from nls_database_parameters;
参数[nls_language]表示了显示方式,
就是sqlplus的程序的显示字体,有 SIMPLIFIED CHINESE,American america
参数[nls_characterset]是字符集设定,
常用的一些字符集有 UTF8,US7ASCII,WE8ISO8859P1,
ZHS16CGB231280,ZHS16GBK,AL32UTF8

2> 修改 客户端字符集 (sqlplus的字符集)
用户的环境变量中增加[NLS_LANG]
针对oracle账户:
[oracle@localhost ~]$ vi .bash_profile
添加如下变量:
NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG

补充:
查看客户端字符集(dba)
SQL>select * from nls_instance_parameters;

3> 重新登录oracle账户,并重启lsnrctl/instance.

over.
以上解决方案可以:在xwindow下使用MyEclipse7.1做insert与select不出现乱码.

至于:
[在 init = 3(黑白屏登录模式)下做insert或select都出现乱码]问题,
可能就是终端应用程序的字符集不支持了.
也就是:oracle账户init=3的情况下没有对应字符集.(这里比较模糊,说不清楚.请高手!)

回答2:

客户端和字符集和oracle的字符集必须保持一致才可以避免乱码的产生。

建议全部使用UTF-8,修改oracle字符集为UTF-8 :

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 AL32UTF8;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP

回答3:

我感觉是不支持中文输出吧,在OEM下,中文可以正常显示,命令行下面,中文就变乱码了是伐?

回答4:

把linux环境的字符集改成支持中文的,在linux用户的环境变量设置一下export NLS_language=xxxx

回答5:

oracle账户的情况可能是init=3的情况下没有对应字符集
root的环境设置和oracle用户一样吗?

回答6:

确定客户端用的什么工具。乱码的出现是指的直接在服务器上操作,还是通过客户端连到服务器上操作出现的?这些情况都要分清楚。