Oracle 9i数据库字符集全攻略

本文介绍了Oracle数据库中的字符集概念,包括服务器端与客户端字符集的一致性及其对数据展示的影响,详细阐述了Oracle服务器进行字符集转换的规则,并提供了一个从ZHS16GBK到AL32UTF8的具体字符集修改实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

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工具将转储文件导入到数据库中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值