ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【nls_character】中文字符乱码问题与字符集的修改

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

原创 Linux操作系统 作者:ballontt 时间:2013-08-05 21:39:04 0 删除 编辑

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博客 ” ,链接:https://blog.itpub.net/27425054/viewspace-767861/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-08-06

  • 博文量
    28
  • 访问量
    118708