oracle字符集_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1941 | 回复: 0   主题: oracle字符集        下一篇 
wangujc
注册用户
等级:上尉
经验:721
发帖:20
精华:0
注册:2015-5-28
状态:离线
发送短消息息给wangujc 加好友    发送短消息息给wangujc 发消息
发表于: IP:您无权察看 2015-5-28 17:40:08 | [全部帖] [楼主帖] 楼主

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

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

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


然后将dmp 文件的2、3 字节修改为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


该贴被wangujc编辑于2015-5-28 17:47:03




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论