问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

确定客户端用的什么工具。乱码的出现是指的直接在服务器上操作,还是通过客户端连到服务器上操作出现的?这些情况都要分清楚。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中美有什么经济冲突 杨凌衡水实验中学高中学费是多少 蒂芙尼珍珠项链怎么清洗和保养? tiffany&co 的缺点 如何保养蒂芙尼的项链? tiffany保养要多久时间 Tiffany珠宝需要多长时间保养? 人为什么活着,怎样活着都是无憾!! 孩子犟的不行家长怎么教育 有什么比较好用的游戏视频录制软件? 适用于Windows的10个好用的游戏录制软件 take apart的汉语意思是什么? 如何在RAC环境下修改Oracle字符集 take apart是什么意思 如何把oracle的字符集改成GB2132 later than apart是什么意思? away和apart意思一样吗 windows下装的oracle,如何将字符集al32utf8改为zhs16gbk apart这个单词翻译成中文是什么意思 如何在linux下更改数据库字符集 跪求:急需!!! 如何修改Oracle字符集?具体一点,最好是一步一步说明下... ORACLE不同数据库字符集数据交互,如何转换乱码? ORACLE显示中文为乱码,怎么修改? oracle 10如何修改字符集? oracle数据库字符集怎么从utf-8改为zhs16gbk ...现在数据库的字符集为WE8ISO8859P1,需把字符集设置为ZHS16GBK... 请问我该怎么提取公积金? 如何提取住房公积金 黑龙江省 黑龙江七方河支不支持手机提取公积金 vivo y7s相机可以自定义水印吗? 黑龙江省龙煤矿业集团个人公积金怎么提取 a race apart是什么意思 oracle 乱码 如何解决 break apart是什么意思 oracle修改字符集把utf8修改成AMERICAN _ AMERICA. ZHS16GBK fall apart是什么意思 fly apart是什么意思及反义词 tell apart是什么意思 apart to 什么意思? 用什么来判断鸡的年龄 如何判断小鸡的年龄? 用什么判断鸡的年龄 小鸡怎么鉴别日龄 怎么查看蚂蚁森林鸡多大 小鸡怎么分辨是公是母?小鸡要多少天才长大? 怎样判断小鸡长大后是公鸡还是母鸡 怎么查看蚂蚁森林鸡多大? 怎样判断小鸡长大后是公鸡还是母鸡? 小鸡多大能拎着倒过来分公母 小鸡的雄雌是怎么区分的? 我脑袋有时好使,有时不好使,怎么办?这正常吗?