Linux Centos6/7 Oracle11g 修改Oracle字符集为ZHS16GBK(附: 其它字符集查询命令)
1.登录到系统,切换到oracle用户权限2.查询Oracle Sever端的字符集3.查询Oracle Client端的字符集4.Server端字符集修改5.Client端字符集修改6.重启navicat,删除现有表,重建表进行测试**附: 其它字符集查询命令**前情提要:公司新创建的数据库 需要修改字符为ZHS16GBK (老数据库修改字符可能比较麻烦,最好先备份数据再进行操作)
1.登录到系统,切换到oracle用户权限
[root@localhost ~]# su oracle[oracle@localhost ~]# sqlplus / as sysdba
2.查询Oracle Sever端的字符集
# 查看数据库版本SQL>select * from v$version# Oracle Server端字符集查询SQL> select userenv('language') from dual;# 由此可以看到现在的字符集,若不是想要的字符集,则需要修改。先退出SQL。SQL> exit
3.查询Oracle Client端的字符集
[oracle@localhost ~]# echo $NLS_LANG# 如果发现查出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集。如果还是有乱码,则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题。
4.Server端字符集修改
# 将数据库启动到RESTRICTED模式下做字符集更改:[oracle@localhost ~]# sqlplus / as sysdbaSQL> conn /as sysdba ##登录到oracleSQL> shutdown immediate ##将oracle关闭SQL> startup mount ##进入mount模式SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; ##启用受限会话System altered. SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; ##设置作业队列进程为0(当设置为0的时候任何方式创建的job都无法执行)System altered. SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;##设置Qnnn进程和QMNC进程为0(为了防止修改字符集时还有其他任务执行)System altered. SQL> alter database open;SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;SQL> shutdown immediateSQL> startup# 查看修改结果SQL> select * from v$nls_parameters; SQL> exit
5.Client端字符集修改
# 在/home/oracle与/root用户目录下的.bash_profile中,添加或修改export NLS_LANG=“AMERICAN_AMERICA.ZHS16GBK”语句[oracle@localhost ~]# vi /home/oracle/.bash_profile#在最后加入如下代码并保存退出export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"# 以下命令使配置立即生效[oracle@localhost ~]# source /home/oracle/.bash_profile
6.重启navicat,删除现有表,重建表进行测试
(如果navicat无法连接成功,卸载后重新安装,并使用较新版本的oci文件即可)
注:如果表内已有数据,必须先备份数据,否则出现乱码无法恢复。
附: 其它字符集查询命令
# 查询dmp文件的字符集SQL>select nls_charset_name(to_number('0354','xxxx'))from dual;# 数据库服务器字符集SQL>select * from nls_database_parameters(来源于props$,是表示数据库的字符集)# 客户端字符集环境SQL>select * from nls_instance_parameters(其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表)# 会话字符集环境SQL>select * from nls_session_parameters(来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是altersession完成,如果会话没有特殊的设置,将与nls_instance_parameters一致)### 如果多个设置存在的时候,NLS作用优先级别:Sql function > alter session> 环境变量或注册表> 参数文件> 数据库默认参数。字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。
总结:本文主要参考大佬文章,其中少部分为自己个人看法和配置,个人记性不好,所以总结加记要;再次感谢CSDN各位大佬的贡献,我只是个小小搬运工。
参考大佬文献
/Bameirilyo/article/details/83895973
/Dreamer_good/article/details/78090361
/qq_37823979/article/details/105573522