1.oracle server端字符集查询
代码以下:
select userenv('language') from dual;
sql
server字符集修改:数据库
将数据库启动到RESTRICTED模式下作字符集更改:
代码以下:
SQL>conn /as sysdbabash
SQL>shutdown immediate; oracle
SQL>startup mountssh
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION; 测试
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; spa
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;orm
SQL>alter database open; server
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
提示咱们的字符集:新字符集必须为旧字符集的超集,这时咱们能够跳过超集的检查作更改:
代码以下:
SQL>ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
SQL>select * from v$nls_parameters;
重启检查是否更改完成:
代码以下:
SQL>shutdown immediate;
SQL>startup
SQL>select * from v$nls_parameters;
咱们看到这个过程和以前ALTER DATABASE CHARACTER SET操做的内部过程是彻底相同的,也就是说INTERNAL_USE提供的帮助就是使Oracle数据库绕过了子集与超集的校验
这一方法在某些方面是有用处的,好比测试;应用于产品环境时你们应该当心,可能会有一些意外的问题。
2.oracle client端字符集修改
代码以下:
$echo$NLS_LANG
client字符集修改:
在 /home/oracle与 /root用户目录下的.bash_profile中添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 语句
关闭当前ssh窗口。
注意:NLS_LANG变量必定要配置正确不然会引发sqlplus失效。
3.修改数据库字符集为UTF-8
1.以DBA登陆
2.执行转换语句:
代码以下:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT EXCLUSIVE;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE NATIONAL CHARACTER SET UTF8;
SHUTDOWN IMMEDIATE;
STARTUP;
注意:若是没有大对象,在使用过程当中进行语言转换没有什么影响!
可能会出现ORA-12717:CANNOT ALTER DATABASE NATIONAL CHARACTER SET WHEN NCLOBDATAEXISTS, 解决这个问题的方法
利用INTERNAL_USE 关键字修改区域设置代码以下:ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;