前情提要:公司新创建的数据库 需要修改字符为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 sysdba

SQL> conn /as sysdba   ##登录到oracle
SQL> 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 immediate
SQL> 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各位大佬的贡献,我只是个小小搬运工。

参考大佬文献

https://blog.csdn.net/Bameirilyo/article/details/83895973

https://blog.csdn.net/Dreamer_good/article/details/78090361

https://blog.csdn.net/qq_37823979/article/details/105573522

Logo

更多推荐