一、简介
Oracle 的字符集存在于服务器端和客户端,同时字符(包括中英文字符)存储于数据库中也是以一定的字符集编码存放
正常情况下,当服务器端与客户端字符集一致,且加载到ORACLE数据库的数据字符集与服务器字符集也一致时,数据方能正常在客户端进行显示
1.服务器字符集可用下面的语句查询:
SELECT * FROM V$NLS_PARAMETERS WHERE parameter LIKE '%CHARACTERSET';
2.客户端的字符集在注册表或环境变量中指示:
注册表:运行REGEDIT,HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOME0->NLS_LANG
环境变量:NLS_LANG
3.查看数据库中存放的字符编码(以"中"字为例,16进制方式显示):
SELECT '中',DUMP('中',16) FROM dual;
二、Oracle服务器进行字符集转换的规则
Oracle服务器根据客户端的字符集判断是否需要在服务器端进行转换
1.在做查询操作时
a.如果客户端指定的字符集与服务器端指定的字符集一致,则服务器端不进行转换直接将字符编码传到客户端进行解析显示
b.如果客户端指定的字符集与服务器端指定的字符集不一致,刚服务器端将把字符编码转换为客户端指定的字符集编码再传给客户端进行解析显示
2.在做exp操作时
a.如果客户端指定的字符集与服务器端指定的字符集一致,服务器不进行转换直接转储为dmp文件
b.如果客户端指定的字符集与服务器端指定的字符集不一致,服务器将把数据字符集转换为客户端指定的字符集进行转储
3.在做imp操作进
a.如果转储文件的字符集与服务器端指定的字符集一致,服务器不进行转换直接将转储文件导入到数据库中存放
b.如果转储文件的字符集与服务器端指定的字符集不一致,服务器将把转储文件的字符集转换为服务器端指定的字符集进行存放
三、Oracle 9i服务器字符集修改实例 ZHS16GBK -> AL32UTF8
1.客户端指定为ZHS16GBK字符集,用exp工具将所有用户数据导出为转储文件
2.强制转换字符集,数据库应该在RESTRICTED模式下进行
SQLPLUS "/ AS SYSDBA"
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER SESSION SET SQL_TRACE=TRUE;
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 AL32UTF8;
--INTERNAL_USE 用于跳过子集与超集的检查,如果不加会报错
--ALTER SYSTEM DISABLE RESTRICTED SESSION;
SHUTDOWN IMMEDIATE
STARTUP
3.客户端指定为ZHS16GBK字符集,用imp工具将转储文件导入到数据库中
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com