Oracle修改字符集

Oracle服务器内部的字符集




查看oracle字符集
select * from nls_database_parameters  




这是Oracle数据库存储数据使用的字符集。


在Oracle中可能使用


Select userenv('language') from dual;


或者:


Select name, value$ from props$;


查看。




NLS_LANG变量里保存的字符集


这个是Oracle设置的一个变量。


在Windows中,这个变量保存在注册表中:


HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0保存着NLS_LANG变量。




在Unix/Linux中,则需要自己进行设置了。我本人是在.profile里面加上


NLS_LANG=AMERICAN_AMERICA.ZHS16GBK


export NLS_LANG






客户端应用的字符集


使用Oracle里数据或者向Oracle提供数据的应用程序。




如果 Oracle服务器内部的字符集 和 NLS_LANG变量里保存的字符集 相同,在进行Oracle查询时,就会将Oracle中的数据直接查出来,返回给查询用户。进行Oracle的插入操作,就会直接将插入的数据保存进数据库中。


但是如果不同的话,Oracle查询时,会根据这两个字符集的一个映射,将数据库中的数据作一个转换,再返回给查询用户。进行插入操作时,也会根据映射,将插入的数据作一个转换,再插入数据库。这也是产生乱码的原因,这一层转换,把数据都给转乱了。


解决办法:
将数据库的字符集和NLS_LANG字符集设置的一样,就可以避免乱码的出现了。


修改数据库字符集的步骤如下:


1、拥有修改权限(用管理用户登录)。


SQL> conn sys/sys as sysdba;


2、关闭数据库。


SQL>shutdown immediate;


    3、启动数据库到Mount状态下。


SQL> STARTUP MOUNT;


ORACLE instance started.




Total System Global Area   76619308 bytes


Fixed Size                   454188 bytes


Variable Size              58720256 bytes


Database Buffers           16777216 bytes


Redo Buffers                 667648 bytes


Database mounted.


SQL> ALTER SESSION SET SQL_TRACE=TRUE;




Session altered.




SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;




System altered.




SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;




System altered.




SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;




System altered.




4、启动数据库


SQL> Alter database open;


5、修改字符集


SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;


注:


1. 如果数据库表中有CLOB类型的列,是不允许修改字符集的,解决方法为,先导出这个表的内容,然后删除这个表,修改完后,再导入这个表的内容就可以了。


2. 旧的字符集必须是新的字符集的子集,否则不能修改。




修改完后,可以查看一下修改是否成功。




6、关闭数据库


SQL> Shutdown immediate;


7、重新启动数据库


SQL> startup;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值