Oracle修改字符集全过程

 

问题描述:
                varchar2(2) abc;
                intert into table_name(abc) values('好');
                报错:插入字符过长!经过测试,发现一个汉字占3个字节。

问题所在:
                使用的字符集是UTF8,就有可能出现这个错误!
                使用命令查看:
                SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';

                PARAMETER
                --------------------------------------------------------------------------------
                VALUE
                --------------------------------------------------------------------------------
                NLS_CHARACTERSET
                AL32UTF8

解决方法:建议使用ZHS16GBK字符集!
操作:
cmd命令行下,执行
①sqlplus /nolog
②conn user/pwd@orcl as sysdba  注:最好使用sys用户登录
③SQL> SHUTDOWN IMMEDIATE; //立即停止数据库
④conn user/pwd@orcl as sysdba //连接到一个空闲例程
   注:如此处提示“TNS:监听程序无法识别链接描述符中请求的服务”,则进入oracle dbhome_1\netwrok\admin\目录
          打开listener文件,如下

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = G:\oracle\product\11.2.0\db_1)

      (PROGRAM = extproc)

    )

//粗体为新增内容

   (SID_DESC =

    (GLOBAL_DBNAME = ORCL)

    (ORACLE_HOME = G:\oracle\product\11.2.0\db_1)  

    (SID_NAME = ORCL)

    )

  )

重启oracle的listener服务。

⑤ SQL> STARTUP MOUNT; 

⑥ SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; 
⑦ SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 
⑧ SQL> ALTER DATABASE OPEN; 
⑨ SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; //此句容易出错,“新字符集必须为旧字符集的超集”
⑩ SQL> SHUTDOWN IMMEDIATE;
end :SQL> STARTUP;

下面再用                SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
看一下吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值