陈奇网络工作室

更改oracle字符集

建设工作站服务器

更改数据库服务器端字符集

创建数据库字符集后,原则上不能更改。 如果需要更改字符集,则通常需要导出数据库数据,重建数据库,然后导入并转换数据库数据,或者使用ALTER DATABASE CHARACTER SET语句更改字符集但是,在创建数据库后更改字符集是有限制的,只有当新字符集是当前字符集的超集时,才能更改数据库字符集。 例如,UTF8是US7ASCII超集,而要更改数据库字符集,则根据alterdac Oracle的官方说明,从子集到超集都支持字符集转换,不能反向转换。 如果两个字符集之间没有子集和超集之间的任何关系,则oracle不支持字符集转换。

对于数据库服务器,错误地更改字符集可能会导致许多不可预测的结果,并严重影响数据库的正常运行。 因此,在更改之前,必须确定这两个字符集是否存在子集和超集关系。 一般来说,除非不得已,否则不建议更改Oracledatabaseserver端的字符集。

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

更改服务器端字符集方法

在oracle 8或更早版本中,可以通过直接修改数据字典表props$来更改数据库的字符集。 但是,从oracle8开始,至少有三个系统表包含数据库字符集信息。 只更改props$表是不完整的,可能会产生严重的后果。 正确的修正方法如下。

$sqlplus /nolog

SQLconn/as sysdba;

如果此时数据库服务器正在运行,请运行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后运行以下命令:

SQLSTARTUP MOUNT;

sqlaltersystemenablerestrictedsession;

sqlaltersystemsetjob _ queue _ processes=0;

sqlaltersystemsetaq _ TM _ processes=0;

SQL alter数据库打开;

sqlalterdatabasecharactersetzhs 16 gbk;

sqlalterdatabasenationalcharactersetzhs 16 gbk;

SQLSHUTDOWN IMMEDIATE;

SQLSTARTUP

更改服务器端字符集方法(可以跳过超集检查) )。

INTERNAL_USE允许您跳过对超集的检查。 将它添加到alterdatabasecharactersetinternal _ use可以完全解决修复问题,并在报告错误时进行修复。 例如:

alterdatabasecharactersetinternal _ use zh s16 cgb 231280;

alterdatabasecharactersetinternal _ use zh s16 gbk;

SQL connect sys/oracle as sysdba

SQL startup mount

sqlaltersessionsetsql _ trace=true;

sqlaltersystemenablerestrictedsession;

sqlaltersystemsetjob _ queue _ processes=0;

sqlaltersystemsetaq _ TM _ processes=0;

SQL alter数据库打开;

SQL set linesize 120;

sqlalterdatabasecharactersetzhs 16 gbk;

错误报告:

alterdatabasecharactersetzhs 16 gbk

ERROR at line 1:

ora-12712:newcharactersetmustbeasupersetofoldcharacterset

INTERNAL_USE允许您跳过对超集的检查。 alterdatabasecharactersetinternal _ use

sqlalterdatabasecharactersetinternal _ use zh s16 gbk;

SQL shutdown immediate;

SQL STARTUP

SQL select name,value $ from props $ wherenamelike\\ & amp; quot; %nls%\\& quot;

NLS_CHARACTERSET

zhs16gbk

双客户端字符集( NLS_LANG参数) ) ) ) ) ) ) ) )。

1客户端字符集的含义

客户端字符集定义了客户端字符数据的编码方式,所有从客户端发送的字符数据都使用客户端定义的字符集进行编码。 可以将客户端视为可以直接连接到数据库的各种APP应用程序,如sqlplus和exp/imp。 客户端字符集是通过设置NLS_LANG参数设置的。

2查询2Oracle客户端字符集

这个比较简单。 在windows平台上,这是注册表中相应OracleHome的NLS_LANG。

也可以在dos窗口中自己设置。 例如:

set nls _ lang=American _ America.zh s16 gbk

只影响此窗口中的环境变量。

在unix平台上,环境变量为NLS_LANG。

$echo $NLS_LANG

AMERICAN_AMERICA.ZHS16GBK

如果检查结果显示服务器端和客户端的字符集不匹配,则统一修改为与服务器端相同的字符集。

3如何设置客户端字符集

1 ) UNIX环境

$ nls _ lang=“simplified Chinese”_ China.zh s16 gbk

$export NLS_LANG

编辑oracle用户的配置文件

或者临时更改export nls _ lang=simplified Chinese _ China.zh s16 gbk

2 ) Windows环境

编辑注册表

regedit.exe—HKEY _ local _ machine—software—Oracle—home 0

详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3