oracle字符集

oracle字符集问题解决分为两种情况:

一、解决客户端问题,临时解决。(意思是把当前的环境变量设置来和系统的语言一样。以oracle为准。)

查看oracle字符集
SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
--------------------------------------------------------------------------------
SIMPLIFIED CHINESE_CHINA.UTF8
查看linux系统字符集
[root@ora ~]# env |grep LANG
LANG=zh_CN.UTF-8
GDM_LANG=zh_CN.UTF-8
定义linux系统字符集

[root@ora ~]# export NLS_LANG='SIMPLIFIED CHINESE_CHINA.UTF8'
定义oracle环境字符集
[root@ora ~]# su - oracle
[oracle@ora ~]$ export NLS_LANG='SIMPLIFIED CHINESE_CHINA.UTF8'
[oracle@ora ~]$ !sql

查看结果
SQL> select * from database_properties;

二、这种刚好相反,修改oracle与os一样(这种是盖总写的,一起学习了)下面也写出了两种方法,copy过来的,请大家参考

Linux 下更改 oracle客户端字符集和服务端字符集

1.Linux 下更改 oracle客户端字符集,即设置环境变量“ NLS_LANG“的值

查看客户端字符集,在终端下执行:

echo $NLS_LANG

修改客户端字符集:

sudo gedit /etc/environment

environment 文件中增加以下内容:

NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

export NLS_LANG

重新启动操作系统即可。

2. 修改 oracle服务端的字符集。

查看服务端字符集:

select userenv('language') from dual;

修改服务端字符集,终端下执行:

$ORACLE_HOME/bin/sqlplus /nolog

进入sqlplus 命令行

SQL>conn / as sysdba;

1 ) . 关闭数据库

SQL>SHUTDOWN IMMEDIATE;

2 ) . 启动到 Mount

STARTUP MOUNT;

ALTER SYSTEM ENABLE RESTRICTED SESSION;

ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

ALTER SYSTEM SET AQ_TM_PROCESSES=0;

ALTER DATABASE OPEN;

ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;

-- 下面一行语句可能会出现错误提示,可以不理会

ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;

SHUTDOWN IMMEDIATE;

STARTUP;

3. 修改 dmp文件字符集

dmp 文件的第23 字节记录了字符集信息,因此直接修改dmp文件的第2 3字节的内容就可以‘骗’过oracle 的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如 US7ASCIIWE8ISO8859P1 ZHS16CGB231280ZHS16GBK 基本都可以改。因为改的只是dmp文件,所以影响不大。

具体的修改方法比较多,最简单的就是直接用UltraEdit 修改dmp文件的第2 和第3个字节。比如想将dmp 文件的字符集改为ZHS16GBK,可以用以下SQL 查出该种字符集对应的16进制代码:

SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;

0354

然后将dmp 文件的23 字节修改为0354即可。

Oracle 提供标准函数,对字符集名称及 ID进行转换 :

SQL> select nls_charset_id('ZHS16GBK') from dual;

NLS_CHARSET_ID('ZHS16GBK')

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

852

1 row selected.

SQL> select nls_charset_name(852) from dual;

NLS_CHAR

--------

ZHS16GBK

1 row selected.

十进制转换十六进制 :

SQL> select to_char('852','xxxx') from dual;

TO_CH

354

 

欢迎加入
database群:119224876(db china联盟) 虚拟化方面群:229845401(虚拟化-云计算-物联网)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值