oracle11g修改字符集的问题

oracle 11g数据库修改字符集

NLS_CHARACTERSET我安装数据库的时候设置为ZHS16GBK,而开发需要的UTF8

据开发反应

改DB的原因是:因为DB不支持中文,向数据库表中插入一条数据的时候,中文就都变了类似于“?(是反问号)”的乱码,

为了能顺利插入成功,故做了此次修改;

查询字符集参数

可以查询以下数据字典或视图查看字符集设置情况

nls_database_parameters、props$、v$nls_parameters

查询结果中NLS_CHARACTERSET表示字符集,NLS_NCHAR_CHARACTERSET表示国家字符集

修改步骤:

SQL> shutdown immediate;

SQL> startup mount;

SQL> alter system enable restricted session;

SQL> alter system set job_queue_processes=0;

SQL> alter database open;

SQL> alter database character set internal_useAL32UTF8(或者是UTF8);

SQL> shutdown immediate;

SQL> startup

SQL>alter system disable restricted session;

再次查看修改好了

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         AL32UTF8

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.SSXF

F AM

NLS_TIME_TZ_FORMAT          HH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXF

F AM TZR

NLS_DUAL_CURRENCY        $

NLS_COMP             BINARY

NLS_LENGTH_SEMANTICS        BYTE

NLS_NCHAR_CONV_EXCP         FALSE

PARAMETER            VALUE

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

NLS_NCHAR_CHARACTERSET          AL16UTF16

NLS_RDBMS_VERSION        11.2.0.4.0

20 rows selected.

SQL>  selectuserenv(‘language‘) from dual;

USERENV(‘LANGUAGE‘)

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

AMERICAN_AMERICA.AL32UTF8

如果是新系统,重新安装得了.

如果是老系统,建议做好完备的备份,因为你的这个变换极有可能出现数据丢失!!!!

一般是utf8变到utf16,反变没有听数过;过程如下你试试吧:

sqlplus "/ as sysdba"

SQL> 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 NATIONAL CHARACTER SETINTERNAL_USE UTF8;

SQL> SHUTDOWN IMMEDIATE

SQL> STARTUP

使用Select * from nls_database_parameter去查看的字符集,发现查到两个字符集,NLS_CHARACTERSET 和NLS_NCHAR_CHARACTERSET。如下:

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               ZHS16GBK

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.SSXF

F AM

NLS_TIME_TZ_FORMAT            HH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXF

F AM TZR

NLS_DUAL_CURRENCY              $

NLS_COMP                       BINARY

NLS_LENGTH_SEMANTICS           BYTE

NLS_NCHAR_CONV_EXCP            FALSE

PARAMETER                      VALUE

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

NLS_NCHAR_CHARACTERSET         AL16UTF16

NLS_RDBMS_VERSION              10.2.0.1.0

已选择20行。

网上查阅了一下,得到以下的结果:

NLS_CHARACTERSET是数据库字符集,NLS_NCHAR_CHARACTERSET是国家字符集

ORACLE中有两大类字符型数据,VARCHAR2是按照数据库字符集来存储数据。而NVARCHAR2是按照国家字符集存储数据的。同样,CHAR和NCHAR也一样,一是数据库字符符,一是国家字符集。

字符集不同,二进制码的组合就不同。

比如有一串二进制信息:1101,0110,1101,0000,1011,1001,1111,1010,按照16位双字节GBK字符集理解,可以代表“中国”两个字。如果单字节的字符集,这一串二进制代表ASC码为214、208、185、250的四个怪字符。

这就是字符集的作用,就是以什么样的形式理解信息

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

oracle 字符集 AL32UTF8、UTF8

分类: oracle 2012-04-18 15:25 22462人阅读 评论(1) 收藏 举报

oracle数据库systemdatabaseglobalizationparameters

简介:ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储、处理和检索数据。利用全球化支持,ORACLE为用户提供自己熟悉的数据库母语环境,诸如日期格式、数字格式和存储序列等。Oracle可以支持多种语言及字符集,其中oracle8i支持48种语言、76个国家地域、229种字符集,而oracle9i则支持57种语言、88个国家地域、235种字符集。由于oracle字符集种类多,且在存储、检索、迁移oracle数据时多个环节与字符集的设置密切相关,因此在实际的应用中,数据库开发和管理人员经常会遇到有关oracle字符集方面的问题。

字符集,实质就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。Oracle数据库最早支持的编码方案是US7ASCII。Oracle的字符集命名遵循以下命名规则:<Language><bitsize><encoding>   即:  <语言><比特位数><编码> 。比如:AL32UTF8表示:AL,代表all,指使用所有语言;32,,32位;UTF8编码。查看环境变量发现:NLS_LANG=American_America.AL32UTF8,American表示语言;America表示地区;AL32UTF8字符集类型。

AL32UTF8和UTF8有什么区别呢?Oracle的UTF8字符集由来已久,至少在8的时候就已经存在了,而对应的是UNICODE 3.0。而AL32UTF8字符集是9i才出现的,其对应的是UNICODE 5.0。这两种字符集的区别在于,UNICODE 5.0与3.0相比,又增加了一些新的补充字符。但是在实际当中,使用到这些新增字符的可能性非常小,因此绝大部分情况下,选择UTF8也是足够的。AL32UTF8字符集是9i才出现的,那么对于9i以后的版本访问没有任何问题,但是对于8i及以前的版本,则不认识这个字符集。这就使得8i及更低版本的客户端在访问9i以上AL32UTF8的数据库时,会碰到各种各样的问题。因此,如果数据库版本都在9i及其以上,不需要考虑ORACLE8的数据库,建议使用AL32UTF8字符集,它采用的Unicode标准要比UTF8采用的Unicode标准更新,支持的字符也更多一些。如果要考虑ORACLE8数据库,建议使用UTF8字符集,它的兼容性好,在ORACLE8及8I数据库上使用AL32UTF8字符集容易出现问题。随着现在版本11g逐渐开始称为主流版本,8i客户端的情况已经越来越少见了,因此在11.2的DBCA中,UTF8已经不是推荐字符集列表中的一员了。我们在遇到不兼容的问题时就要修改字符集。AL32UTF8-->UTF8修改字符集的步骤:

shutdown immediate;    //关闭数据库服务器

startup mount;

alter session set sql_trace=true;

alter system enable restricted session;

alter system set job_queue_processes=0;

alter system set aq_tm_processes=0;

alter database open;

alter database character set internal_use utf8;

alter session set sql_trace=false;

shutdown immediate;

startup;

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

用navicat工具创建的表都是加了”“号

所以知道为什么select * from 表名提示表名不存在的原来了

导致需要select * from "表名"//表名需要添加双引号的

所有数据字典查出来的一律是大写,小写是不对的

时间: 2024-10-10 10:51:05

oracle11g修改字符集的问题的相关文章

oracle11g 修改字符集 修改为ZHS16GBK

转:http://www.cnblogs.com/jay-xu33/p/5210098.html oracle11g 修改字符集 修改为ZHS16GBK1.cmd下,cd到oracle数据库软件的服务器端 如:D:\app\Administrator\product\11.2.0\dbhome_1\BIN 2.输入set ORACLE_SID=你想进入的数据库的那个sid 3.输入 sqlplus /nolog 4.将数据库启动到RESTRICTED模式下做字符集更改: SQL> conn /a

Linux下MySQL5.6的修改字符集编码为UTF8

一.登录MySQL查看用SHOW VARIABLES LIKE 'character%';下字符集,显示如下: +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_conn

Ubuntu12.04安装MariaDB并修改字符集为UTF-8

其实按照MariaDB官网的步骤来安装MariaDB特别的简单,只要按照步骤来做,很容易就搞定了. 首先,到MariaDB官网: https://downloads.mariadb.org/mariadb/repositories/#mirror=qiming&distro=Ubuntu&distro_release=precise&version=5.5 在下面的菜单中,选择你的系统,版本,和你要安装的MariaDB的版本, 然后就会发现下面出现了具体的安装步骤,按照步骤做就很简

修改字符集时source使其生效详解

==版权声明: # 本文的所有内容均来自作者刘春凯的学习总结,未经本人许可,禁止私自转发及使用.QQ:1151887353E-mail:[email protected]      [email protected] ####################################################################== 修改字符集时source使其生效详解 1.1 查看系统当前字符集 [[email protected] ~]# echo $LANG en_

Oracle 12c中文乱码,修改字符集的方法

在windows 7 64位上安装Oracle 12c没有设定字符集,采用的是操作系统默认字符集:WE8MSWIN1252,将字符集修改为:ZHS16GBK.由于过程不可逆,首先需要备份数据库.1.数据库全备 2.查询当前字符集 SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET'; PARAMETER VALUE ----------------------------------------

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

oracle查看字符集和修改字符集 : 查看数据库服务器的字符集: select userenv('language') from dual ; 登陆用dba: 停掉数据库 : shutdown immediate; 启动数据库到mount状态下 : STARTUP MOUNT; ALTER SESSION SET SQL_TRACE=TRUE; ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM SET JOB_QUEUE_PROCESSE

linux系统修改字符集

在rhel7中修改字符集的文件是/etc/locale.conf [[email protected] ~]# cat /etc/locale.conf  LANG="zh_CN.UTF-8" 在rhel6中修改字符集的文件是/etc/sysconfig/il8n

centos 修改字符集为GB2312的方法

这几天总是被一个问题困扰着,那就是base64的加密,在centos 服务器上无法解密.经过反复测试才发现,原来是因为centos 系统没有GB2312库导致的. 加密端是在ASP.NET中处理的,解密是在centos 下使用java.ASP.NET默认采用的是GB2312字符集,所以,对应的解密也必须使用GB2312.为了成功解析,所以必须让centos 也支持GB2312.最终问题解决. 下面将centos 中设置GB2312字符集的方法分享给大家. 第一步:检查下中文支持包是否已经安装 [

mysql5.5与5.5版本关于修改字符集的方法

# vi /etc/my.cnf mysql5.5以下: 在[mysqld]下添加 default-character-set=utf8 在[client]下添加 default-character-set=utf8 mysql 5.5 改为: [client] default-character-set = utf8 [mysqld] character-set-server = utf8 然后重启mysql,验证: mysql> show variables like '%char%'; +