`

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。这种变更通常发生在需要支持特定语言环境的应用场景中,尤其是当应用主要面向中文用户时,采用ZHS16GBK字符集可以更好地...

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

    Oracle数据库字符集是指用于表示数据库中所有字符数据的编码方式。它定义了如何将字符映射到二进制数据,从而确保数据在存储和处理过程中的正确性和一致性。Oracle数据库支持多种字符集,包括单字节字符集(如ASCII...

    Oracle 修改字符集

    ### Oracle 修改字符集 在Oracle数据库管理中,有时我们需要更改...通过以上步骤,我们可以安全地完成Oracle数据库字符集的修改。这不仅可以提高数据库的兼容性和性能,还可以帮助解决由字符集不匹配引起的各种问题。

    对Oracle数据库字符集若干问题的探讨.pdf

    Oracle数据库字符集是数据库系统中一个非常重要的概念,它决定了数据如何被编码和解码,影响着数据库中存储和检索的文本数据的正确性。在Oracle数据库中,字符集分为数据库字符集(Database Character Set)和国家...

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

    乱码通常发生在不同字符集之间转换时,例如从GBK编码转换到UTF-8编码,或者反之。当原始数据的编码与系统识别的编码不匹配时,就会出现无法正确显示的字符,也就是我们常说的乱码。 在数据库编程中,编码问题可能...

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

    例如,如果需要支持更多的国际字符或特殊符号,则可能需要将数据库字符集更改为AL32UTF8。这不仅能够提高数据处理的灵活性,还能确保数据的一致性和完整性。 #### 二、重要概念 1. **字符集**:用于表示文字和符号...

    理解ORACLE数据库字符集

    Oracle数据库字符集是其全球化支持(Globalization Support)的一部分,旨在为用户提供本地化的数据存储和处理环境。字符集是字符编码的集合,它为每个特定的符号分配一个唯一的数值编码。Oracle数据库支持多种语言...

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

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

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

    这里的`AMERICAN_AMERICA`表示语言和地区,而`UTF8`则表示字符集编码。 #### 四、理解NLS_LANG参数 - **NLS_LANG**:该环境变量用于定义客户端的区域设置,包括语言、地区和字符集。 - **LANGUAGE**:指定客户端...

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

    在本案例中,远程 Oracle 数据库使用的字符集为 `AMERICAN_AMERICA.US7ASCII`,而本地 Oracle 数据库使用的字符集为 `SIMPLIFIED CHINESE_CHINA.ZHS16GBK`。这两种不同的字符集设置会导致数据在传输过程中出现乱码。...

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

    Unicode编码方案,如UTF-16和UTF-8,是统一所有字符的标准,UTF-16使用2个字节表示一个字符,而UTF-8则是变长编码,字符长度可为1到3个字节。 字符集之间存在超级和子集的关系,如果字符集A的编码包含了B的所有编码...

    关于用oracle的dbms_xmldom导出xml文档编码格式UTF-8的问题总结

    根据提供的信息,最初尝试通过`dbms_xmldom.setCharset(doc, 'UTF8')`来设置XML文档的字符集为UTF-8,但是发现这种方法不起作用——导出的XML文档只包含`<?xml version="1.0"?>`,而没有指定编码格式。 #### 解决...

    oracle数据库中文乱码问题解决方案.docx

    本文将提供一个详细的解决方案,包括查看和修改数据库服务器端的字符编码、查看和修改客户端字符集的设置方法。 一、查看和修改数据库服务器端的字符编码 在Oracle数据库中,字符编码是由NLS_DATABASE_PARAMETERS...

    修改ORACLE11G字符集

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

    oracle修改字符集

    在使用Oracle数据库的过程中,有时会遇到需要更改数据库字符集的情况,比如将现有的字符集更改为与操作系统一致的字符集,以便更好地支持多语言环境或者解决数据导入导出时的字符编码问题。本文将详细介绍如何在...

    Jdbc连接oracle远程数据库中文乱码解决

    3. **Oracle数据库字符集设置**: - 确保Oracle数据库服务器的字符集与应用程序使用的字符集匹配。这可能需要修改数据库实例的NLS_CHARACTERSET参数,或者在创建表时指定字符集。 4. **IDE与操作系统设置**: - ...

    Oracle_字符集的查看和修改

    数据库字符集在创建数据库时指定,通常在创建后不能更改。创建数据库时,可以同时指定字符集 (CHARACTERSET) 和国家字符集 (NATIONALCHARACTERSET)。 - **字符集** 用于存储 CHAR、VARCHAR2、CLOB、LONG 等类型数据...

    理解Oracle数据库字符集

    Oracle数据库字符集是其全球化支持(Globalization Support)的核心组成部分,也称为国家语言支持(NLS),目的是为了适应不同国家和地区用户的语言环境,包括日期、数字格式和特殊字符的存储和处理。Oracle提供了...

Global site tag (gtag.js) - Google Analytics