oracle数据库如何修改字符集,修改oracle字符集

一 修改数据库SERVER端字符集

数据库字符集在创建后原则上不能更改。如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换,或通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER DATABASE CHARACTER SET UTF8。根据Oracle的官方说明,字符集的转换是从子集到超集受支持,反之不行。如果两种字符集之间根本没有子集和超集的关系,那么字符集的转换是不受oracle支持的。

对数据库server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所以在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来说,除非万不得已,我们不建议修改oracle数据库server端的字符集。

特别说明,我们最常用的两种字符集ZHS16GBK和ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支持。

1 修改server端字符集方法

在oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:

$sqlplus /nolog

SQL>conn / as sysdba;

若此时数据库服务器已启动,则先执行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;

SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP

2 修改server端字符集方法(可以跳过超集的检查)

使用INTERNAL_USE可以跳过超集的检查,ALTER DATABASE character set INTERNAL_USE 加这个以后,就可以彻底解决修改的问题,即使报错也能修改.如:

ALTER DATABASE character set INTERNAL_USE ZHS16CGB231280;

ALTER DATABASE character set INTERNAL_USE zhs16gbk;

SQL> connect sys/oracle as sysdba

SQL> startup mount

SQL> alter session set sql_trace=true;

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> set linesize 120;

SQL> alter database character set ZHS16GBK;

报错:

alter database character set zhs16gbk

ERROR at line 1:

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

# 使用INTERNAL_USE可以跳过超集的检查,ALTER DATABASE character set INTERNAL_USE

SQL> ALTER DATABASE character set INTERNAL_USE zhs16gbk;

SQL> shutdown immediate;

SQL> STARTUP

SQL> select name,value$ from props$ where name like '%NLS%';

NLS_CHARACTERSET

zhs16gbk

二 客户端字符集(NLS_LANG参数)

1 客户端字符集含义

客户端字符集定义了客户端字符数据的编码方式,任何发自或发往客户端的字符数据均使用客户端定义的字符集编码,客户端可以看作是能与数据库直接连接的各种应用,例如sqlplus,exp/imp等。客户端字符集是通过设置NLS_LANG参数来设定的。

2 查询oracle client端的字符集

这个比较简单。在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。

还可以在dos窗口里面自己设置,比如:

set nls_lang=AMERICAN_AMERICA.ZHS16GBK

这样就只影响这个窗口里面的环境变量。

在unix平台下,就是环境变量NLS_LANG。

$echo $NLS_LANG

AMERICAN_AMERICA.ZHS16GBK

如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。

3 客户端字符集设置方法

1)UNIX环境

$NLS_LANG=“simplified chinese”_china.zhs16gbk

$export NLS_LANG

编辑oracle用户的profile文件

或者是临时改变export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

2)Windows环境

编辑注册表

Regedit.exe---HKEY_LOCAL_MACHINE---SOFTWARE---ORACLE—HOME0

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29067253/viewspace-2141543/,如需转载,请注明出处,否则将追究法律责任。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库修改字符集需要执行以下步骤: 1. 确认当前数据库字符集和校对集 可以使用以下命令查询当前数据库字符集和校对集: ``` SELECT * FROM NLS_DATABASE_PARAMETERS; ``` 2. 停止数据库 使用SQL*Plus或者其他工具以SYSDBA身份登录数据库,执行以下命令停止数据库: ``` SHUTDOWN IMMEDIATE; ``` 3. 修改字符集和校对集 执行以下ALTER DATABASE命令修改字符集和校对集: ``` ALTER DATABASE CHARACTER SET <新字符集> [NATIONAL CHARACTER SET <新 NCHAR 字符集>] ; ``` 例如,要将数据库字符集修改为UTF8,可以执行以下命令: ``` ALTER DATABASE CHARACTER SET UTF8; ``` 如果需要修改NCHAR字符集,可以使用以下命令: ``` ALTER DATABASE NATIONAL CHARACTER SET UTF8; ``` 4. 修改所有表的字符集和校对集 执行以下命令修改所有表的字符集和校对集: ``` ALTER TABLE <表名> MODIFY <列名> <数据类型> CHARACTER SET <新字符集> [COLLATE <新校对集>] ; ``` 例如,要将表的字符集修改为UTF8,可以执行以下命令: ``` ALTER TABLE my_table MODIFY my_column VARCHAR2(100) CHARACTER SET UTF8; ``` 如果需要修改校对集,可以使用以下命令: ``` ALTER TABLE my_table MODIFY my_column VARCHAR2(100) CHARACTER SET UTF8 COLLATE <新校对集>; ``` 5. 修改所有索引的字符集和校对集 执行以下命令修改所有索引的字符集和校对集: ``` ALTER INDEX <索引名> REBUILD [TABLESPACE <表空间名>] [PARAMETERS ('NLS_SORT=<新校对集>' [, 'NLS_COMP=<新比较级>'])]; ``` 例如,要将索引的字符集修改为UTF8,可以执行以下命令: ``` ALTER INDEX my_index REBUILD PARAMETERS ('NLS_SORT=UTF8'); ``` 如果需要修改校对集和比较级,可以使用以下命令: ``` ALTER INDEX my_index REBUILD PARAMETERS ('NLS_SORT=<新校对集>', 'NLS_COMP=<新比较级>'); ``` 6. 启动数据库 使用SQL*Plus或者其他工具以SYSDBA身份登录数据库,执行以下命令启动数据库: ``` STARTUP; ``` 注意:修改数据库字符集和校对集是一个非常重要的操作,需要谨慎处理并进行充分测试。在修改前一定要备份数据库,以防修改失败导致数据丢失。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值