一 修改数据库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/,如需转载,请注明出处,否则将追究法律责任。

oracle数据库如何修改字符集,修改oracle字符集相关推荐

  1. oracle表结构修改回滚,87.Oracle数据库SQL开发之 修改表内存——数据库事务的提交和回滚...

    87.Oracle数据库SQL开发之 修改表内存--数据库事务的提交和回滚 数据库事务(transaction)就是一组SQL语句,这组SQL语句时一个逻辑工作单元. 要永久性的记录事务中SQL语句的 ...

  2. Oracle数据库:创建、修改、删除、使用同义词synonym和索引index

    Oracle数据库:创建.修改.删除.使用同义词synonym和索引index 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得 ...

  3. linux数据库实例开机启动,Oracle数据库之Linux下实现Oracle数据库单实例开机自启动设置...

    本文主要向大家介绍了Oracle数据库之Linux下实现Oracle数据库单实例开机自启动设置,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 步骤思路: 1:查看ORACLE_ ...

  4. Oracle数据库中的方案,学习Oracle数据库_理解Oracle数据库中的方案

    理解数据库.表空间.数据文件之间的关系. 每个表空间由一个或多个数据文件组成.数据文件用于在物理上存储表空间中所有逻辑结构的数据.表空间中数据文件的大小之和就是表空间的存储容量(图中系统表空间存储容量 ...

  5. 删除oracle数据库的三种方法,oracle数据库的删除方法详解

    oracle数据库的删除方法详解 1.图形界面删除 练习之前记得创建快照 执行命令之前要保证数据库属于open状态 SQL> alter database open; [oracle@local ...

  6. oracle删除表的一个字段的数据库,学会Oracle数据库删除表字段和Oracle数据库表增加字段方法...

    Oracle数据库添加字段的语法:alter table tablename add (column datatype [default  value][null/not null],-.); Ora ...

  7. exp导oracle数据库,使用exp/imp 在oracle数据库间导数据

    最近工作需要将oracle数据库的表数据导出到另一个oracle数据库表,找到了oracle 自带的命令行,并记录下导数据过程. 导数据过程分以下几步: 假设源数据库为A,目标数据库为B 1.在B上通 ...

  8. oracle数据库异常---SP2-1503: 无法初始化 Oracle 调用界面 SP2-1503: 无法初始化 Oracle 问题的解决办法

    oracle数据库异常---SP2-1503: 无法初始化 Oracle 调用界面 SP2-1503: 无法初始化 Oracle 问题的解决办法 win7 下   cmd  运行   sqlplus  ...

  9. oracle数据库 cmd,cmd命令操作Oracle数据库

    //注意cmd命令执行的密码字符不能过于复杂 不能带有特殊符号 以免执行不通过 譬如有!@#¥%--&*之类的  所以在Oracle数据库设置密码是不要太复杂 /String Database ...

  10. Oracle数据库的并行查询,解决Oracle数据库并行查询出错的方法

    当我们在使用Oracle数据库的时候会发现Oracle数据库并行查询出错这一问题,那么你知道如何解决Oracle数据库并行查询出错吗?下面就是解决Oracle数据库并行查询出错的方法介绍. Oracl ...

最新文章

  1. 网络编程学习笔记(TCP套接口选项)
  2. Leetcode 24. Swap Nodes in Pairs
  3. 我的世界java和网易能联机吗_网易我的世界单机怎么转联机
  4. java 监控 配置 文件怎么打开_java实现文件变化监控的方法(推荐)
  5. 语句乎?表达式乎?(Python/C)
  6. CentOS 7.5 重置 root 密码
  7. K-Means算法的Java实现
  8. nginx php重定向,nginx如何重定向信息
  9. win10如何与终端电脑连接服务器,教程 | Windows 10 下在命令行窗口使用 ssh 连接服务器...
  10. Bias and Variance with Mismatched Distributions
  11. 黑马程序员Java零基础视频教程(2022最新Java)B站视频学习笔记-Day8-面向对象
  12. TCP和UDP的区别
  13. 说说你对servlet 的理解或者 servlet 是什么?
  14. 编译原理——NFA确定化和DFA最小化
  15. 【安全】【信息搜集】Google Hacking
  16. Work20230417
  17. 解读ORACLE数据库的统一命名与编码规范
  18. python mac程序结束发出声音,Python程序运行结束如何加入提示音
  19. 印度开始追上中国?为何文盲几乎一半,却总能出顶级程序员和高管
  20. 卓有成效管理者的实践 阅读笔记

热门文章

  1. 清除 Windows 访问共享目录的账号密码
  2. win10ltsb 安装应用商店 ----解决surface 安装了windows10ltsb以后不能用相机
  3. 携引擎以令天下”:JavaScript从前端到全端的逆袭之路
  4. 一种软件网络验证方式的实现 + 网络验证转本地验证的一种实现(附VC源码)...
  5. linux用户无法sudo解决办法
  6. 相册的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  7. 【创造者】(DrawLine)绘制扇形检测范围敌人
  8. 在OpenFOAM中获取每个网格的Skewness
  9. OFDM载波间隔_如果用30Khz子载波间隔会比15Khz子载波间隔传递的有效数据少吗?...
  10. 【例4-6】香甜的黄油