linux上操作ORACLE时不论是insert还是select,都出现乱码。网上查了不...
发布网友
发布时间:2022-04-27 12:31
我来回答
共6个回答
热心网友
时间:2022-05-01 20:39
【解答】
根据上面配置
=>
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的情况下没有对应字符集.(这里比较模糊,说不清楚.请高手!)
热心网友
时间:2022-05-01 21:57
客户端和字符集和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
热心网友
时间:2022-05-01 23:32
我感觉是不支持中文输出吧,在OEM下,中文可以正常显示,命令行下面,中文就变乱码了是伐?
热心网友
时间:2022-05-02 01:23
把linux环境的字符集改成支持中文的,在linux用户的环境变量设置一下export NLS_language=xxxx
热心网友
时间:2022-05-02 03:31
oracle账户的情况可能是init=3的情况下没有对应字符集
root的环境设置和oracle用户一样吗?
热心网友
时间:2022-05-02 05:56
确定客户端用的什么工具。乱码的出现是指的直接在服务器上操作,还是通过客户端连到服务器上操作出现的?这些情况都要分清楚。