oracle 11g修改字符集

数据库插入报错插入某列的值太大(性别)   该列长度为1  实际值为4  数据库抛出异常

最后发现是字符集的问题。改字符集就好了,对中文不友好。。。

以下是执行命令的全部过程:

 

第一步:启动sqlplus

C:\Users\dszho>sqlplus

SQL*Plus: Release 11.2.0.1.0 Production on 星期四 6月 22 09:56:04 2017

Copyright (c) 1982, 2010, Oracle. All rights reserved.

 

第二步:使用system sysdba帐号登录

请输入用户名: system as sysdba
输入口令:

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

第三步:关闭数据库

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

 

第四步:以mount启动
SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area 3423965184 bytes
Fixed Size 2180544 bytes
Variable Size 1862273600 bytes
Database Buffers 1543503872 bytes
Redo Buffers 16007168 bytes
数据库装载完毕。

 

第五步:调整session

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 CHARACTER SET AL32UTF8;
ALTER DATABASE CHARACTER SET AL32UTF8
*
第 1 行出现错误:
ORA-12712: 新字符集必须为旧字符集的超集


SQL> ALTER DATABASE character set INTERNAL_USE AL32UTF8;

数据库已更改。

SQL> select * from v$nls_parameters;

PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE

NLS_TERRITORY
CHINA

NLS_CURRENCY


PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_ISO_CURRENCY
CHINA

NLS_NUMERIC_CHARACTERS
.,

NLS_CALENDAR
GREGORIAN


PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_DATE_FORMAT
DD-MON-RR

NLS_DATE_LANGUAGE
SIMPLIFIED CHINESE

NLS_CHARACTERSET
AL32UTF8


PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_SORT
BINARY

NLS_TIME_FORMAT
HH.MI.SSXFF AM

NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM


PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY


PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_COMP
BINARY

NLS_LENGTH_SEMANTICS
BYTE


PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_NCHAR_CONV_EXCP
FALSE


已选择19行。

 

第七步:关闭数据库并重新启动

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 3423965184 bytes
Fixed Size 2180544 bytes
Variable Size 1862273600 bytes
Database Buffers 1543503872 bytes
Redo Buffers 16007168 bytes
数据库装载完毕。
数据库已经打开。

 

第八步:查看是否修改成功

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
--------------------------------------------------------------------------------
SIMPLIFIED CHINESE_CHINA.AL32UTF8

 

可以看到已经修改成功。

 

每个人遇到的问题不一样,所以要多多研究。

 

备注:遇到的问题

在PL/SQL中运行这些语句是不行的,而且可能导致所有帐号都无法通过PL/SQL进行登录

解决办法:启动sqlplus,login:sys as sysdba 讲session改回去。重启电脑即可。

 

注意:

SERVICE_NAME要设置正确,否则会出现在PL/SQL中编码未修改过来的问题。

 

 

 

1、修改server端字符集(不建议使用)

  在oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:

  $sqlplus /nolog

  SQL>conn / as sysdba;

以上方法测试不行,用scott/tiger登陆sqlplus然后connect sys/sys as sysdba,然后输入命令即可

  若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:

  SQL>STARTUP MOUNT;

  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 CHARACTER SET INTERNAL_USE ZHS16GBK; //跳过超子集检测

  SQL>ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;

这一行不起作用,执行后出错ORA-00933: SQL 命令未正确结束,不过执行上一行命令已经生效,其他文章里未提到本行。

  SQL>SHUTDOWN IMMEDIATE;

  SQL>STARTUP

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值