建设工作站服务器
更改数据库服务器端字符集
创建数据库字符集后,原则上不能更改。 如果需要更改字符集,则通常需要导出数据库数据,重建数据库,然后导入并转换数据库数据,或者使用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