如何修改oracle的字符集编码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修改oracle的字符集编码相关的知识,希望对你有一定的参考价值。

1. 备份数据库中所有用户的数据
以oracle用户登陆,执行以下命令
# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.UTF8”
保持与数据库服务器端一致,这样在exp导出时,就不会存在字符的转换了,备份最原始的数据。
2. 评估UTF8转换成ZHS16GBK的风险
转换之前,要使用Oracle的csscan工具对数据库扫描,评估字符集转换前后,数据有可能的损坏情况。如果评估情况糟糕,那就绝对要放弃了。
先安装属于 CSMIG 用户的一套表和过程。以oracle用户登陆UNIX,
#sqlplus “/ as sysdab”
SQL>@$ORACLE_HOME/ rdbms/admin/csminst.sql
SQL>exit
# $ORACLE_HOME\\bin\\csscan -help
可以更清楚如何使用csscan。
# $ORACLE_HOME/bin/csscan system/sunday user=mmsc FROMCHAR=UTF8 TOCHAR=ZHS16GBK ARRAY=102400 PROCESS=3 > csscan.log
以上命令意思是扫描用户:mmsc中的所有数据,从字符集UTF8更改为ZHS16GBK的转换情况。然后得到三个文件:scan.txt、scan.out、scan.err。
查看scan.out,scan.err,可以看出mmsc用户下的所有的数据都是可以转换的,并且没有出现转换“Exceptional”的情况,因此可以更放心一点。
3. 更改数据库的字符集为ZHS16GBK
前面说过,通过命令“Alter Database Characeter Set XXXX”,实现从超集到子集的转换,在Oracle是不允许的。但是该命令,提供这样的命令方式:
Alter Database Character Set INTERNAL_CONVERT/ INTERNAL_USE XXXX
参考技术A 查看及修改oracle编码格式方法: 1、查看oracle数据库字符集: select userenv('language') from dual; 查询结果: SIMPLIFIED CHINESE_CHINA.AL32UTF8 2、修改oracle数据库字符集:(在SQL Plus中) 参考技术B 完全不建议修改,存在较大风险。建议以你需要的字符集新建一个库后将数据迁移过去。 参考技术C oracle数据库的字符集更改

A、oracle server 端 字符集查询

select userenv('language') from dual

其中NLS_CHARACTERSET 为server端字符集

NLS_LANGUAGE 为 server端字符显示形式

B、查询oracle client端的字符集

$echo $NLS_LANG
如果发现你select 出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集。如果还是有乱码,则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题。

C、server端字符集修改

*****************************************************************

* 更改字符集步骤方法(WE8ISO8859P1 --> ZHS16GBK) *

*****************************************************************

SQL>
将数据库启动到RESTRICTED模式下做字符集更改:
SQL> conn /as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;本回答被提问者采纳

oralce 修改编码

 
描述:将不同字符集oracle数据导入另一个oracle时,出现中文乱码现象。

一、oracle字符集查询

select userenv(‘language‘) from dual; 查询结果:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

其中NLS_CHARACTERSET 为server端字符集

NLS_LANGUAGE 为 server端字符显示形式


二、查询oracle client端的字符集

$echo $NLS_LANG

如果发现你select 出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集。如果还是有乱码,则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题。

 

三、server端字符集修改

更改字符集步骤方法(WE8ISO8859P1 --> ZHS16GBK)

1.开始 - 运行 - 输入cmd 进入命令提示符

输入

sqlplus /nolog

 

2.以管理员身份登录sqlplus

sql> conn / as sysdba;
sql> shutdown immediate;
database closed.
database dismounted.
oracle instance shut down.
sql> startup mount;
oracle instance started.
total system global area 135337420 bytes
fixed size 452044 bytes
variable size 109051904 bytes
database buffers 25165824 bytes
redo buffers 667648 bytes
database mounted.
sql> alter system enable restricted session;
system altered.
sql> alter system set job_queue_processes=0;
system altered.
sql> alter system set aq_tm_processes=0;
system altered.
sql> alter database open;
database altered.
sql> alter database character set  internal_use ZHS16GBK;
sql> shutdown immediate;
sql> startup;
 
四、修改pl/sql developer 的编码

  在windows中创 建一个名为“NLS_LANG”的系统环境变量,设置其值为“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”,然后重新启动 pl/sql developer,这样检索出来的中文内容就不会是乱码了。如果想转换为UTF8字符集,可以赋予“NLS_LANG”为 “AMERICAN_AMERICA.UTF8”,然后重新启动 pl/sql developer。其它字符集设置同上

以上是关于如何修改oracle的字符集编码的主要内容,如果未能解决你的问题,请参考以下文章

39.windows cmd客户端字符集编码修改

怎么查看oracle数据库中的的编码格式

怎么查看oracle数据库中的的编码格式

如何修改MySQL字符集

oracle修改字符编码

如何修改mssql数据库编码