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/,如需转载,请注明出处,否则将追究法律责任。
oracle数据库如何修改字符集,修改oracle字符集相关推荐
- oracle表结构修改回滚,87.Oracle数据库SQL开发之 修改表内存——数据库事务的提交和回滚...
87.Oracle数据库SQL开发之 修改表内存--数据库事务的提交和回滚 数据库事务(transaction)就是一组SQL语句,这组SQL语句时一个逻辑工作单元. 要永久性的记录事务中SQL语句的 ...
- Oracle数据库:创建、修改、删除、使用同义词synonym和索引index
Oracle数据库:创建.修改.删除.使用同义词synonym和索引index 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得 ...
- linux数据库实例开机启动,Oracle数据库之Linux下实现Oracle数据库单实例开机自启动设置...
本文主要向大家介绍了Oracle数据库之Linux下实现Oracle数据库单实例开机自启动设置,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 步骤思路: 1:查看ORACLE_ ...
- Oracle数据库中的方案,学习Oracle数据库_理解Oracle数据库中的方案
理解数据库.表空间.数据文件之间的关系. 每个表空间由一个或多个数据文件组成.数据文件用于在物理上存储表空间中所有逻辑结构的数据.表空间中数据文件的大小之和就是表空间的存储容量(图中系统表空间存储容量 ...
- 删除oracle数据库的三种方法,oracle数据库的删除方法详解
oracle数据库的删除方法详解 1.图形界面删除 练习之前记得创建快照 执行命令之前要保证数据库属于open状态 SQL> alter database open; [oracle@local ...
- oracle删除表的一个字段的数据库,学会Oracle数据库删除表字段和Oracle数据库表增加字段方法...
Oracle数据库添加字段的语法:alter table tablename add (column datatype [default value][null/not null],-.); Ora ...
- exp导oracle数据库,使用exp/imp 在oracle数据库间导数据
最近工作需要将oracle数据库的表数据导出到另一个oracle数据库表,找到了oracle 自带的命令行,并记录下导数据过程. 导数据过程分以下几步: 假设源数据库为A,目标数据库为B 1.在B上通 ...
- oracle数据库异常---SP2-1503: 无法初始化 Oracle 调用界面 SP2-1503: 无法初始化 Oracle 问题的解决办法
oracle数据库异常---SP2-1503: 无法初始化 Oracle 调用界面 SP2-1503: 无法初始化 Oracle 问题的解决办法 win7 下 cmd 运行 sqlplus ...
- oracle数据库 cmd,cmd命令操作Oracle数据库
//注意cmd命令执行的密码字符不能过于复杂 不能带有特殊符号 以免执行不通过 譬如有!@#¥%--&*之类的 所以在Oracle数据库设置密码是不要太复杂 /String Database ...
- Oracle数据库的并行查询,解决Oracle数据库并行查询出错的方法
当我们在使用Oracle数据库的时候会发现Oracle数据库并行查询出错这一问题,那么你知道如何解决Oracle数据库并行查询出错吗?下面就是解决Oracle数据库并行查询出错的方法介绍. Oracl ...
最新文章
- 网络编程学习笔记(TCP套接口选项)
- Leetcode 24. Swap Nodes in Pairs
- 我的世界java和网易能联机吗_网易我的世界单机怎么转联机
- java 监控 配置 文件怎么打开_java实现文件变化监控的方法(推荐)
- 语句乎?表达式乎?(Python/C)
- CentOS 7.5 重置 root 密码
- K-Means算法的Java实现
- nginx php重定向,nginx如何重定向信息
- win10如何与终端电脑连接服务器,教程 | Windows 10 下在命令行窗口使用 ssh 连接服务器...
- Bias and Variance with Mismatched Distributions
- 黑马程序员Java零基础视频教程(2022最新Java)B站视频学习笔记-Day8-面向对象
- TCP和UDP的区别
- 说说你对servlet 的理解或者 servlet 是什么?
- 编译原理——NFA确定化和DFA最小化
- 【安全】【信息搜集】Google Hacking
- Work20230417
- 解读ORACLE数据库的统一命名与编码规范
- python mac程序结束发出声音,Python程序运行结束如何加入提示音
- 印度开始追上中国?为何文盲几乎一半,却总能出顶级程序员和高管
- 卓有成效管理者的实践 阅读笔记
热门文章
- 清除 Windows 访问共享目录的账号密码
- win10ltsb 安装应用商店 ----解决surface 安装了windows10ltsb以后不能用相机
- 携引擎以令天下”:JavaScript从前端到全端的逆袭之路
- 一种软件网络验证方式的实现 + 网络验证转本地验证的一种实现(附VC源码)...
- linux用户无法sudo解决办法
- 相册的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 【创造者】(DrawLine)绘制扇形检测范围敌人
- 在OpenFOAM中获取每个网格的Skewness
- OFDM载波间隔_如果用30Khz子载波间隔会比15Khz子载波间隔传递的有效数据少吗?...
- 【例4-6】香甜的黄油