您好,欢迎访问一九零五行业门户网

更改Oracle字符集:把字符集ZHS16GBK换成UTF8

更改oracle字符集:把字符集zhs16gbk换成utf8
sql> select name,value$ from props$ where name like '%nls%';
name                           value$
------------------------------ ------------------------------
nls_language                   american
nls_territory                  america
nls_currency                   $
nls_iso_currency               america
nls_numeric_characters         .,
nls_characterset               zhs16gbk
nls_calendar                   gregorian
nls_date_format                dd-mon-rr
nls_date_language              american
nls_sort                       binary
nls_time_format                hh.mi.ssxff am
name                           value$
------------------------------ ------------------------------
nls_timestamp_format           dd-mon-rr hh.mi.ssxff am
nls_time_tz_format             hh.mi.ssxff am tzr
nls_timestamp_tz_format        dd-mon-rr hh.mi.ssxff am tzr
nls_dual_currency              $
nls_comp                       binary
nls_length_semantics           byte
nls_nchar_conv_excp            false
nls_nchar_characterset         al16utf16
nls_rdbms_version              10.2.0.1.0
20 rows selected.
nls_characterset是数据库字符集,nls_nchar_characterset是国家字符集
oracle中有两大类字符型数据,,varchar2是按照数据库字符集来存储数据。
而nvarchar2是按照国家字符集存储数据的。同样,char和nchar也一样,一是数据库字符符,一是国家字符集。
转换字符集,数据库应该在restricted模式下
首先要确定修改后的字符集是不是修改前的超集,如果不是可能出现相同的代码点对应不同的字符,出现乱码的问题。
出现这个错误是 oracle 只支持从子集到超集的转变
那有什么方法可进行强制转换呢?
该指令会跳过子集与超集的检验,当然强制转换可能会造成数据的损坏,要谨慎使用!!
下面借助eygle的帖子执行。
sql> shutdown immediate
database closed.
database dismounted.
oracle instance shut down.
sql> startup mount;
oracle instance started.
total system global area 1845493760 bytes
fixed size                  2021568 bytes
variable size             452986688 bytes
database buffers         1375731712 bytes
redo buffers               14753792 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.
sql> alter database open;
database altered.
sql> alter database character set internal_use utf8;
database altered.
sql>update props$ set value$='utf8' where
其它类似信息

推荐信息