200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > oracle查看编码格式以及修改字符集编码

oracle查看编码格式以及修改字符集编码

时间:2024-06-20 01:52:17

相关推荐

oracle查看编码格式以及修改字符集编码

oracle查看编码格式以及修改字符集编码

查看oracle数据库的编码集 客户端字符集环境select * from nls_instance_parameter,其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

会话字符集环境 select * from nls_session_parameter,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameter一致。

客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件

字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

这其来源于props$,这是表示数据库的字符集。 SQL> select * from nls_database_parameters;

PARAMETER

--------------------

VALUE

--------------------

NLS_CHARACTERSET

AL32UTF8

oracle客户端编码,其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表会话字符集环境

select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

SQL> select * from nls_instance_parameters where parameter='NLS_LANGUAGE';

PARAMETER

--------------------

VALUE

--------------------

NLS_LANGUAGE

SIMPLIFIED CHINESE

2.修改字符集编码

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)*

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

目前我的数据库环境的字符集是AL32UTF8,那么把它改成ZHS16GBK

1.首先以sysdba的身份登录上去 conn /as sysdba

2.关闭数据库shutdown immediate;

3.以mount打来数据库,startup mount

4.设置session

将数据库启动到RESTRICTED模式下做字符集更改:

SQL>conn /as sysdba

--sysdba的身份登录上去 conn /as sysdba

SQL>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; --修改字符集

ERROR at line 1:

ORA-12712: new character set must be a superset of old character set

这会可能会报错,提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:

ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

这条语句就可以了,TERNAL_USE提供的帮助就会使oracle绕过了子集与超集的验证,这条语句和上面的语句内部操作时完全相同的。

SQL>shutdown immediate; --关闭,重新启动

SQL> startup

SQL>select * from v$nls_parameters;

client端字符集修改

在 /home/oracle与 /root用户目录下的.bash_profile中

添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 语句

PS:当然字符集最好不要轻易修改,因为这会对数据库的数据有直接的影响,如果是生产环境的话,可能会造成不可估计得损失。

下面提供三种解决方法:

(1) 服务器端重新安装ORACLE

这种情况仅仅使用于空库和具有同一种字符集的数据。

(2)强行修改服务器端ORACLE当前字符集

在用imp命令加载数据前,先在客户端用sql*plus登录system DBA用户,执行下列SQL语句进行当前ORACLE数据库字符集修改:

SQL > create database character set US7ASCII

* create database character set US7ASCII

ERROR at line 1:

ORA-01031: insufficient privileges

你会发现语句执行过程中,出现上述错误提示信息,此时不用理会,实际上

ORACLE数据库的字符集已被强行修改为US7ASCII,接着用imp命令装载数据。等数

据装载完成以后,shutdown 数据库,再startup 数据库,用合法用户登录ORACLE

数据库,在sql>命令提示符下,运行select * from V$NLS_PARAMETERS,可以看

到ORACLE数据库字符集已复原,这时再查看有汉字字符数据的表时,汉字已能被正

确显示。

(3)利用数据格式转储,避开字符集限制

这种方法主要用于加载外来ORACLE数据库的不同字符集数据。其方法如下:

先将数据加载到具有相同字符集的服务器上,然后用转换工具卸出为

foxbase 格式或access格式数据库,再用转换工具转入到不同字符集的ORACLE数

据库中,这样就避免了ORACLE字符集的困扰。目前数据库格式转换的工具很多,象

power builder5.0以上版本提供的pipeline,Microsoft Access数据库提供的数

据导入/导出功能 等。转换方法参见有关资料说明。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。