oracle10g字符集问题

阅读更多
版本信息
系统环境:win7-64bit
oracle及PLSQL:


首先说明一下,我修改orale的字符集主要是为了满足本地数据库和远程数据库字符集的一致性。因为,我这边远程数据库脱离了内网是没办法使用的,
所以自己在本机建立一套同样的数据库,以满足平时的使用。

oracle 10g xe安装成功之后,默认的字符集是AMERICAN_AMERICA.AL32UTF8,并且服务端和客户端是一致的。
而我这边远程数据库服务端字符集却是AMERICAN_AMERICA.ZHS16GBK。

这里区别的地方在于GBK中文占2个字符,UTF8中文则是占3个字符。这样从远程数据库导出来的表结构字段的长度在本机就会不适用了。
比如:
name varchar(30)
在远程服务器上面该字段可以插入15个中文字段,在本地则只能插入10个中文字段。


以下操作的都是本机oracle服务器端和客户端。

1、修改之前首先查看下服务器上的字符集:
select userenv('language') from dual;
2、通过dos窗口连接数据库。
oracle10g字符集问题_第1张图片

这里需要说明一下,输入密码的时候需要指定连接方式。
格式:密码[空格]as[sysdba]
然后回车即可。
如果只是单纯的输入密码则会报错:



输入正确后:
oracle10g字符集问题_第2张图片

具体命令:
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area  805306368 bytes
Fixed Size                  1289996 bytes
Variable Size             218104052 bytes
Database Buffers          583008256 bytes
Redo Buffers                2904064 bytes
数据库装载完毕。
SQL> alert system enable restricted session;
SP2-0734: 未知的命令开头 "alert syst..." - 忽略了剩余的行。
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 charset set ZHS16GBK;
alter database charset set ZHS16GBK
                           *
第 1 行出现错误:
ORA-02231: ALTER DATABASE 选项缺失或无效


SQL> alter database character set ZHS16GBK;
alter database character set ZHS16GBK
*
第 1 行出现错误:
ORA-12712: 新字符集必须为旧字符集的超集


SQL> alter database character set ZHS16GBK;
alter database character set ZHS16GBK
*
第 1 行出现错误:
ORA-12712: 新字符集必须为旧字符集的超集


SQL> alter database character set internal_use ZHS16GBK;

数据库已更改。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。

Total System Global Area  805306368 bytes
Fixed Size                  1289996 bytes
Variable Size             218104052 bytes
Database Buffers          583008256 bytes
Redo Buffers                2904064 bytes
数据库装载完毕。
数据库已经打开。

   ===================================================================================

至此oracle数据库服务器端算是设置成功了。

这个时候使用PLSQL可能就会出现下面的错误提示了,原因应该就是客户端的字符集编码还没有改过来,所以和服务器端不一致。
更改客户端字符集编码的方式网上都有:更改注册表和环境变量。我采用的是修改环境变量,因为我发现我的注册表中没有关于oracle的注册表。
oracle10g字符集问题_第3张图片


环境变量修改:NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
oracle10g字符集问题_第4张图片


改过之后就正常了。而且数据插入也正常了。但是oracle主页就不正常了。
不过也不管了。反正也用不到。
http://127.0.0.1:8080/apex/f?p=4550:11:1498699066044660::NO:::
oracle10g字符集问题_第5张图片
  • oracle10g字符集问题_第6张图片
  • 大小: 3.2 KB
  • oracle10g字符集问题_第7张图片
  • 大小: 4.1 KB
  • oracle10g字符集问题_第8张图片
  • 大小: 1.8 KB
  • oracle10g字符集问题_第9张图片
  • 大小: 2.7 KB
  • oracle10g字符集问题_第10张图片
  • 大小: 69.9 KB
  • oracle10g字符集问题_第11张图片
  • 大小: 4.7 KB
  • oracle10g字符集问题_第12张图片
  • 大小: 14.3 KB
  • 查看图片附件

你可能感兴趣的:(oracle,plsql)