`

字符集转换WE8ISO8859P1 --> AL32UTF8 ????

 
阅读更多

 怎样把后台数据库的字符集从WE8ISO8859P1 --> AL32UTF8????
我转换的时候提示 AL32UTF8 不是 WE8ISO8859P1 的超集!那么能否转换呢?

 

一旦数据库创建后,数据库的字符集理论上讲是不能改变的。因此,在设计和安装之初考虑使用哪一种字符集十分重要。根据Oracle的官方说明,字符集的转换是从子集到超集受支持,反之不行。如果两种字符集之间根本没有子集和超集的关系,那么字符集的转换是不受oracle支持的。对数据库server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所以在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来说,除非万不得已,我们不建议修改oracle数据库server端的字符集。特别说明,我们最常用的两种字符集ZHS16GBK和ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支持。

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

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

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

  $sqlplus /nolog

  SQL>conn / 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 ZHS16GBK;

  SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;

  SQL>SHUTDOWN IMMEDIATE;

  SQL>STARTUP

  2、修改dmp文件字符集

  上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。

  具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:

  SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;

  0354

  然后将dmp文件的2、3字节修改为0354即可。

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

第一种方式没用,提示 AL32UTF8 不是 WE8ISO8859P1 的超集
第二种方式,我的dmp文件太大,有3G啊

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

如果dmp文件很大,用ue无法打开,就需要用程序的方法了。网上有人用java存储过程写了转换的程序(用java存储过程的好处是通用性教好,缺点是比较麻烦)。要求oracle数据库一定要安装JVM选项。
建议楼主别改server的字符集。

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

使用如下命令进行强制转换
alter database character set INTERNAL_CONVERT UTF8;
但是一定要做好备份。可能转换过来会损坏数据库。
转换完毕使用csscan检查数据库。

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

 

http://bbs.csdn.net/topics/90291821

 

分享到:
评论

相关推荐

    Oracle字符集转换

    假设当前数据库字符集为WE8ISO8859P1,但实际需求要求其字符集为AL32UTF8。面对这种情况,传统的做法有两种: 1. **重建数据库**:这是一种简单粗暴的方式,但往往耗时耗力,尤其是对于大型数据库而言,重建不仅...

    oracle数据库导入导出命令! 更改字符集

    - **字符集识别**:Oracle数据库支持多种字符集,如AL32UTF8、WE8ISO8859P1等,不同的字符集用于支持不同语言和特殊字符。在导入导出过程中,确保源和目标数据库的字符集兼容至关重要,否则可能导致乱码。 - **字符...

    ORACLE数据库字符集[参考].pdf

    例如,WE8ISO8859P1是WE8MSWIN1252的子集,而许多字符集如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是US7ASCII的超集。 在Oracle数据库中,有两个关键的字符集概念:数据库字符集(服务器端字符集)和国家字符集...

    理解ORACLE数据库字符集

    - 单字节编码:7位字符集(如US7ASCII)和8位字符集(如WE8ISO8859P1)主要用于英语和其他欧洲语言。 - 多字节编码:分为变长和定长两种。变长多字节编码(如AL32UTF8,支持日语、汉语等)中,字符可以由1至多个字节...

    oracle 中文字符集问题

    Oracle数据库在处理字符集时遵循一定的兼容规则,如`WE8ISO8859P1`和`WE8MSWIN1252`等字符集之间可以互相转换,但与`US7ASCII`不兼容。这种兼容性机制确保了数据在不同字符集环境下的正确迁移和显示。 #### 四、...

    ORACLE 字符集简介

    - 单字节8位字符集:可以定义256个字符,适合于欧洲大部分国家,例如WE8ISO8859P1。 2. **多字节编码** - 变长多字节编码:某些字符用一个字节表示,其他字符用两个或多个字符表示,常用于对亚洲语言的支持,如...

    查看oracle dmp字符集的小工具

    不同的数据库可能采用不同的字符集,如AL32UTF8(Unicode UTF-8编码)或WE8ISO8859P1(西欧语言的ISO 8859-1编码)。当从一个字符集迁移到另一个字符集时,必须知道源DMP文件的字符集,以便进行相应的转换设置,防止...

    Oracle 字符集详解

    常见的Oracle字符集有AL32UTF8(支持Unicode的UTF-8编码)、WE8ISO8859P1(西欧字符集)、ZHS16GBK(简体中文GB18030编码)等。 六、多语言环境下的字符集配置 在处理多语言数据时,Oracle提供了NLSSORT参数来调整...

    oracle字符集查看与修改[归类].pdf

    例如,WE8ISO8859P1是WE8MSWIN1252的子集,而许多字符集如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是US7ASCII的超集。 5. **数据库字符集与国家字符集** - **数据库字符集**:在创建数据库时设定,一般不可更改...

    Oracle 字符集的查看和修改

    例如,WE8ISO8859P1是WE8MSWIN1252的子集,而 US7ASCII 是许多其他字符集的超集。 数据库字符集是在创建数据库时指定的,通常不可更改。它分为两部分:字符集和国家字符集。字符集用于存储非Unicode数据类型,如...

    修改oracle数据库的字符集方法(RAC)

    这些命令将数据库的字符集从 `WE8ISO8859P1` 更改为 `ZHS16GBK`,并将国家字符集更改为 `AL16UTF16`。 #### 7. 重新配置集群数据库模式 在完成字符集更改之后,需要重新配置集群数据库模式。 ```sql ALTER SYSTEM...

    Oracle字符集专题

    Oracle支持多种字符集,如US7ASCII、WE8ISO8859P1、AL32UTF8等,每种字符集都有其特定的覆盖范围和适用场景。 Oracle字符集分为两种类型:客户端字符集和服务器字符集。客户端字符集用于显示和输入数据,而服务器...

    oracle字符集查看与修改.pdf

    * 单字节 8 位字符集,可以定义 256 个字符,适合于欧洲大部分国家例如 WE8ISO8859P1(西欧、8 位、ISO 标准 8859P1 编码)。 2.2.2 多字节编码 * 变长多字节编码:某些字符用一个字节表示,其它字符用两个或多个...

    Oracle_字符集的查看和修改

    - 单字节 8 位字符集,定义 256 个字符,适合欧洲大部分国家(如 WE8ISO8859P1)。 - **多字节编码**: - 变长多字节编码,例如 AL32UTF8(适用于所有语言)。 - 定长多字节编码,如 AF16UTF16(只用于国家字符集...

    Oracle字符集的查看和修改.pdf

    - **单字节编码**:7位字符集如US7ASCII,以及8位字符集,如WE8ISO8859P1,适用于西欧国家。 - **多字节编码**:包括变长和定长两种。变长编码如AL32UTF8和zhs16GBK用于支持亚洲语言,定长的如AF16UTF16是Unicode...

    理解Oracle数据库字符集

    例如,WE8ISO8859P1是WE8MSWIN1252的子集,而US7ASCII是很多其他字符集的子集。 4. **数据库字符集(服务器端字符集)**: - **字符集**:在创建数据库时指定,用于存储CHAR、VARCHAR2、CLOB、LONG等类型数据,...

    ORACLE_CHAR_ToolS(ORACLE字符转换)

    Oracle数据库支持多种字符集,如AL32UTF8(Unicode的UTF-8编码)、WE8ISO8859P1(西欧语言的ISO-8859-1编码)等。当数据库的字符集与应用程序或客户端使用的字符集不一致时,就可能出现乱码现象。 在Oracle中,乱码...

    Oracle字符集研究.ppt

    例如,WE8ISO8859P1是WE8MSWIN1252的子集,而US7ASCII是很多其他字符集的超集。 在Oracle数据库中,数据库字符集是在创建数据库时指定的,一般不建议或无法轻易更改。选择合适的字符集对于确保数据的完整性和兼容性...

Global site tag (gtag.js) - Google Analytics