oracle10g字符集问题

版本信息
系统环境:win7-64bit
oracle及PLSQL:
[img]http://dl2.iteye.com/upload/attachment/0113/1672/0ca08a7c-ae74-37b7-8603-7328fa1aac98.png[/img]

首先说明一下,我修改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窗口连接数据库。
[img]http://dl2.iteye.com/upload/attachment/0113/1674/ca1d8d08-0ae6-36c3-a896-6186d93cd81e.png[/img]

这里需要说明一下,输入密码的时候需要指定连接方式。
格式:密码[空格]as[sysdba]
然后回车即可。
如果只是单纯的输入密码则会报错:
[img]http://dl2.iteye.com/upload/attachment/0113/1676/07f4dc8e-a8ba-3377-b661-996e9d1924cc.png[/img]


输入正确后:
[img]http://dl2.iteye.com/upload/attachment/0113/1678/4e7a512c-ef15-3372-a86b-b9e5868d2acd.png[/img]

具体命令:
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的注册表。
[img]http://dl2.iteye.com/upload/attachment/0113/1680/350f405c-b3eb-36da-bb4b-982568d49d91.png[/img]


环境变量修改:NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
[img]http://dl2.iteye.com/upload/attachment/0113/1682/017a8c76-4e06-3402-9755-9c71c3bc9d9c.png[/img]


改过之后就正常了。而且数据插入也正常了。但是oracle主页就不正常了。
不过也不管了。反正也用不到。
http://127.0.0.1:8080/apex/f?p=4550:11:1498699066044660::NO:::
[img]http://dl2.iteye.com/upload/attachment/0113/1684/578c2dd7-e11d-384e-acc0-acf1b86e7ec3.png[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值