`

oracle 修改数据库的字符集编码为UTF-8

阅读更多

1、查看数据库字符集 ?
数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。
客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,
表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
会 话字符集环境 select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

 

 

2、修改Oracle的字符集,如下例把字符集GB2312修改为UTF-8
步骤:
1.在SQL*PLUS 中,以DBA登录
conn 用户名 as sysdba
2.执行转换语句:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT EXCLUSIVE;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE NATIONAL CHARACTER SET UTF8;
SHUTDOWN immediate;
startup;

注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持,不然不能start)

按上面的做法就可以,但是可能会出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when
NCLOB data exists’ 这样的提示信息

要解决这个问题有两种方法

一个是,利用INTERNAL_USE 关键字修改区域设置,
还有一个是利用re-create,但是re-create有点复杂,所以请用internal_use,

SHUTDOWN IMMEDIATE;
STARTUP MOUNT EXCLUSIVE;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
SHUTDOWN immediate;
startup;

如果按上面的做法做,National charset的区域设置就没有问题 。

 

 

 

oracle11GR2上建立一个新用户的过程,同时更改字符集.

 

SQL> create user mygmccrm identified by abc123; 

User created. 

SQL> grant create session to mygmccrm; 

Grant succeeded. 

SQL> grant create table to mygmccrm; 

Grant succeeded. 

SQL> grant unlimited tablespace to mygmccrm; 

Grant succeeded. 


SQL> grant connect to mygmccrm with admin option; 

Grant succeeded. 


SQL> select * from nls_database_parameters; 

PARAMETER VALUE 
------------------------------ ---------------------------------------- 
NLS_LANGUAGE AMERICAN 
NLS_TERRITORY AMERICA 
NLS_CURRENCY $ 
NLS_ISO_CURRENCY AMERICA 
NLS_NUMERIC_CHARACTERS ., 
NLS_CHARACTERSET WE8MSWIN1252 
NLS_CALENDAR GREGORIAN 
NLS_DATE_FORMAT DD-MON-RR 
NLS_DATE_LANGUAGE AMERICAN 
NLS_SORT BINARY 
NLS_TIME_FORMAT HH.MI.SSXFF AM 

PARAMETER 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 11.2.0.1.0 

20 rows selected. 


SQL> select * from nls_database_parameters; 

PARAMETER VALUE 
------------------------------ ---------------------------------------- 
NLS_LANGUAGE AMERICAN 
NLS_TERRITORY AMERICA 
NLS_CURRENCY $ 
NLS_ISO_CURRENCY AMERICA 
NLS_NUMERIC_CHARACTERS ., 
NLS_CHARACTERSET WE8MSWIN1252 
NLS_CALENDAR GREGORIAN 
NLS_DATE_FORMAT DD-MON-RR 
NLS_DATE_LANGUAGE AMERICAN 
NLS_SORT BINARY 
NLS_TIME_FORMAT HH.MI.SSXFF AM 

PARAMETER 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 UTF8 
NLS_RDBMS_VERSION 11.2.0.1.0 

20 rows selected. 


SQL> SHUTDOWN IMMEDIATE; 
Database closed. 
Database dismounted. 
ORACLE instance shut down. 
SQL> STARTUP MOUNT EXCLUSIVE; 
ORACLE instance started. 

Total System Global Area 855982080 bytes 
Fixed Size 2218152 bytes 
Variable Size 616564568 bytes 
Database Buffers 230686720 bytes 
Redo Buffers 6512640 bytes 
Database mounted. 
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 NATIONAL CHARACTER SET UTF8; 
ALTER DATABASE NATIONAL CHARACTER SET UTF8 
* 
ERROR at line 1: 
ORA-12717: Cannot issue ALTER DATABASE NATIONAL CHARACTER SET when NCLOB, NCHAR 
or NVARCHAR2 data exists 


SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8; 

Database altered. 

SQL> SHUTDOWN immediate; 
Database closed. 
Database dismounted. 
ORACLE instance shut down. 
SQL> startup 
ORACLE instance started. 


create public database link gm 
connect to app_mygmc identified by gm11gtest 
using 'gm'; 
SQL> grant dba to mygmccrm with admin option; 

Grant succeeded. 


UPDATE sys.PROPS$ SET value$='SIMPLIFIED CHINESE' WHERE NAME='NLS_LANGUAGE';

 

分享到:
评论
1 楼 gc715409742 2011-06-27  
引用
122.SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;   

为什么不是改成utf-8呢?
strut2中做添加,添加到oracle还是乱码

相关推荐

    Oracle11g 字符集 AL32UTF8 修改为ZHS16GBK

    通过上述步骤,您可以成功地将Oracle11g数据库的字符集从AL32UTF8更改为ZHS16GBK。在整个过程中,请务必密切关注每一个命令的执行情况,并遵循所有相关的提示信息,以确保操作顺利进行。此外,在执行任何更改之前,...

    oracle数据库字符集 无法修改数据库字符集 乱码

    Oracle数据库支持多种字符集,包括单字节字符集(如ASCII)和多字节字符集(如UTF-8)。正确的字符集选择对于避免乱码、提高数据完整性以及优化性能具有重要意义。 ### 修改Oracle数据库字符集的原因及挑战 #### ...

    Oracle 修改字符集

    本文将详细介绍如何修改Oracle数据库的字符集,并提供实际操作步骤。 #### 一、理解Oracle字符集 1. **字符集定义**:字符集(Character Set)是一组符号及编码规则的集合,用于存储和处理文本数据。 2. **Oracle...

    数据库编程之编码转换实例--乱码分析

    2. 检查数据库设置:确认数据库的字符集配置是否正确,如果需要,可以修改数据库的字符集。 3. 调整应用程序编码:确保应用程序的输入输出编码与数据库的编码匹配。 4. 使用转换工具:对于已存在乱码的数据,可以...

    oracle修改字符集

    通过上述步骤,我们可以成功地将Oracle数据库的字符集更改为所需的格式,例如ZHS16GBK。这一过程虽然较为复杂,但对于确保数据库能够正确处理特定的语言环境和支持多种字符编码是非常必要的。在整个操作过程中,最...

    oracle字符集的查看和client字符集的修改

    - 修改`NLS_LANG`键值为所需的字符集格式,例如:`NLS_LANG=AMERICAN_AMERICA.UTF8`。这里的`AMERICAN_AMERICA`表示语言和地区,而`UTF8`则表示字符集编码。 #### 四、理解NLS_LANG参数 - **NLS_LANG**:该环境...

    修改ORACLE11G字符集

    如果需要设置为UTF-8编码,则可以将其设为`SIMPLIFIED CHINESE_CHINA.AL32UTF8`。 此外,还可以通过执行`select userenv('language') from dual;`来检查客户端的语言设置是否正确。 #### 3. 修改数据库字符集 接...

    jdbc连接oracle字符集不同出现乱码

    这种情况通常发生在远程 Oracle 数据库与本地 Oracle 数据库的字符集设置不一致的情况下。 在本案例中,远程 Oracle 数据库使用的字符集为 `AMERICAN_AMERICA.US7ASCII`,而本地 Oracle 数据库使用的字符集为 `...

    oracle英文字符集插入到中文字符集

    例如,将英文字符集的数据转换为UTF-8,然后再进行插入操作。 2. **存储过程**:在Oracle数据库端创建存储过程,该过程接受英文字符集的输入,并在内部完成转换后再进行插入。这样,客户端无需更改环境变量,只需...

    Oracle_字符集的查看和修改

    Oracle 最早支持的字符集编码是 US7ASCII。 **3.2 Oracle 字符集命名规则** Oracle 字符集命名遵循以下规则:`<Language><bitsize><encoding>`,即 `<语言><比特位数><编码>`。例如,ZHS16GBK 表示 16 位简体中文 ...

    oracle字符集查看与修改.pdf

    * UTF-8 是 Unicode 的 8 位编码方式,是一种变长多字节编码,这种编码可以用 1、2、3 个字节表示一个 Unicode 字符,AL32UTF8、UTF8、UTFE 是 UTF-8 编码字符集。 2.3 字符集超级 * 当一种字符集(字符集 A) 的...

    oracle 10g xe 版本更改数据库字符集

    在进行Oracle 10g XE数据库的字符集修改时,需要理解几个关键的概念和技术点。本文将详细介绍如何更改Oracle 10g XE数据库的字符集,并提供具体的操作步骤。 #### 一、概述 在Oracle 10g XE版本中,数据库默认安装...

    问题共享:修改oracle字符集

    本文将详细介绍如何解决Oracle数据库字符集问题,特别是如何将当前使用的GBK字符集更改为UTF-8,以支持更广泛的字符编码。 #### 二、字符集一致性的重要性 在修改Oracle字符集之前,我们需要确保三个关键组件的...

    oracle-java.rar_oracle

    如果数据库的字符集不支持中文,需要修改数据库的字符集设置,但这是一个重大操作,需谨慎进行。 2. **JDBC连接字符串**:在建立数据库连接时,通过JDBC连接字符串指定字符集。例如,添加`&charset=UTF-8`参数,...

    oracle字符集修改

    - `NLS_LANG=AMERICAN_AMERICA.UTF8`:另一个例子是将环境设置为英文环境,并使用UTF-8编码。 2. **查询当前的NLS参数**: - `SELECT * FROM v$nls_parameters;`:此查询可以列出当前数据库实例的所有NLS参数设置...

    Oracle数据库字符集问题总结

    查询Oracle数据库的字符集通常涉及三个方面:服务器端、客户端和DMP文件。查询服务器端字符集可以通过执行SQL语句`SELECT userenv('language') FROM dual;`来获取。DMP文件的字符集信息存储在文件的前几个字节中,...

    修改Oracle字符集

    ### 修改Oracle字符集 在Oracle数据库管理中,有时我们需要对现有的数据库进行字符集的更改...通过以上步骤,你可以成功地将Oracle数据库的字符集修改为UTF-8,从而支持更多的语言环境,并提高数据的一致性和兼容性。

    oracle10g字符集的查看与修改.doc

    UTF-8是Unicode的一个变长编码实现,它可以使用1至3个字节表示一个字符。UTF-16则是Unicode的16位编码方式,通常用于存储和处理大量Unicode字符的数据。 字符集之间的关系可以通过超级和子集的概念来理解。如果一个...

Global site tag (gtag.js) - Google Analytics