【nls_character】中文字符乱码问题与字符集的修改

SYS@BALLONTT> select ASCIISTR('你好ab') from dual;

ASCIISTR(' ab')

--------------------------------

\FFFD\FFFD\FFFD\FFFD\FFFD\FFFDab

结果显示中字段的名字乱码,字没有了

 

首先,考虑系统的字符集

[oracle@bjr1p2 ~]$ echo $LANG

en_US.UTF-8

字符集为UTF-8,支持中文编码

 

再来查看数据库字符集

SYS@BALLONTT> select * from v$nls_parameters

  2  where parameter='NLS_CHARACTERSET';

PARAMETER            VALUE

-------------------- --------------------

NLS_CHARACTERSET     US7ASCII

数据库字符集为US7ASCII,此字符集虽然支持中文编码,但是是使用了单字节编码。如果采用单字节的字符集来存储中文信息,数据库的字符集虽然是US7ASCII编码,但里面存储的数据编码实际上却是另外的编码格式,这种不一致的情况很容易引起问题,建议不要这样使用。

那如果数据库的字符集换成其他字符集(如双字节编码的ZHS16GBK)还会出现这种问题吗?

实验一下便知道了,我仍然在此数据库上进行实验操作,所以将数据库的字符集由US7ASCII更改为ZHS16GBK

(数据库的字符集修改有两种方法:1.将数据逻辑导出,重新建库,在导入 2.使用命令直接修改。但是,数据库字符集的修改可能会存在安全隐患,一般不建议进行直接修改)

 

数据库字符集的修改:

SYS@BALLONTT> shutdown immediate;

SYS@BALLONTT> startup mount


SYS@BALLONTT> ALTER SESSION SET SQL_TRACE=TRUE;

Session altered.


SYS@BALLONTT> ALTER SYSTEM ENABLE RESTRICTED SESSION;

System altered.


SYS@BALLONTT> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

System altered.


SYS@BALLONTT> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

System altered.


SYS@BALLONTT> alter database open;

Database altered.


SYS@BALLONTT>  ALTER DATABASE CHARACTER SET ZHS16GBK;

 ALTER DATABASE CHARACTER SET ZHS16GBK

*

ERROR at line 1:

ORA-12716: Cannot ALTER DATABASE CHARACTER SET when CLOB data exists

如果报错,执行如下语句跳过检查:

SYS@BALLONTT> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

Database altered.

 

重启

SYS@BALLONTT> shutdown immediate;

SYS@BALLONTT> startup

 

查看数据库字符集

SYS@BALLONTT> select * from v$nls_parameters

  2  where parameter='NLS_CHARACTERSET';

PARAMETER               VALUE

--------------------      --------------------

NLS_CHARACTERSET     ZHS16GBK

已经修改为ZHS16GBK


再来测试一下汉字的插入

SYS@BALLONTT> select ASCIISTR('你好') from dual;

ASCIISTR('你好')

\6D63\72B2\30BD

没有任何问题


ballontt

2013/8/6

---The End---

如需转载,请标明出处和链接,大谢!

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27425054/viewspace-767861/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27425054/viewspace-767861/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值