欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

oracle10g字符集问题

程序员文章站 2022-06-14 08:06:17
...
版本信息
系统环境:win7-64bit
oracle及PLSQL:
oracle10g字符集问题
            
    
    博客分类: oracle oracleplsql

首先说明一下,我修改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字符集问题
            
    
    博客分类: oracle oracleplsql

这里需要说明一下,输入密码的时候需要指定连接方式。
格式:密码[空格]as[sysdba]
然后回车即可。
如果只是单纯的输入密码则会报错:
oracle10g字符集问题
            
    
    博客分类: oracle oracleplsql


输入正确后:
oracle10g字符集问题
            
    
    博客分类: oracle oracleplsql

具体命令:
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字符集问题
            
    
    博客分类: oracle oracleplsql


环境变量修改:NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
oracle10g字符集问题
            
    
    博客分类: oracle oracleplsql


改过之后就正常了。而且数据插入也正常了。但是oracle主页就不正常了。
不过也不管了。反正也用不到。
http://127.0.0.1:8080/apex/f?p=4550:11:1498699066044660::NO:::
oracle10g字符集问题
            
    
    博客分类: oracle oracleplsql
  • oracle10g字符集问题
            
    
    博客分类: oracle oracleplsql
  • 大小: 3.2 KB
  • oracle10g字符集问题
            
    
    博客分类: oracle oracleplsql
  • 大小: 4.1 KB
  • oracle10g字符集问题
            
    
    博客分类: oracle oracleplsql
  • 大小: 1.8 KB
  • oracle10g字符集问题
            
    
    博客分类: oracle oracleplsql
  • 大小: 2.7 KB
  • oracle10g字符集问题
            
    
    博客分类: oracle oracleplsql
  • 大小: 69.9 KB
  • oracle10g字符集问题
            
    
    博客分类: oracle oracleplsql
  • 大小: 4.7 KB
  • oracle10g字符集问题
            
    
    博客分类: oracle oracleplsql
  • 大小: 14.3 KB
相关标签: oracle plsql