ORACLE字符集基础知识

概念描叙

ORACLE数据库有国家字符集(national character set)与数据库字符集(database character set)之分。两者都是在创建数据库时需要设置的。国家字符集主要是用于NCHAR、NVARCHAR、NCLOB类型的字段数据,而数据库字符集使用很广泛,它用于:CHAR、VARCHAR、CLOB、LONG类型的字段数据;

ORACLE的字符集名字一般由以下部分组成:语言或区域、表示一个字符的比特位数、标准字符集名称(可选项,S或C,表示服务器或客户端)。ORACLE字符集UTF8与UTFE不符合此规定,其它基本都是这种格式。NLS_LANG=<Language>_<Territory>.<Clients Characterset>

set nls_lang=AMERICAN_AMERICA.UTF8

set nls_lang=SIMPLIFIED CHINESE_AMERICA.UTF8

NLS( National Language Support)国家语言支持。NLS是数据库的一个非常强大的特性,它控制着数据的许多方面:比如数据如何存储,一般来说它控制着以下两个方面:

文本数据持久存储在磁盘上时如何编码

透明的将数据从一个字符集转换到另外一个字符集。

假设你在数据库中用WE8ISO8859P1 字符集存储8 位的数据,但是你的某些客户使用的是一种7 位字符集,如US7ASCII字符集转换过程通常会修改数据,而你往往会把一个较大的字符集(在此例中就是8 位字符集)映射到一个较小的字符集(此例中的7 位字符集)。这是一种有损转换(lossy conversion),字符就会被修改,这只是因为:较小的字符集不可能表示较大字符集中的每一个字符。但是这种转换必须发生。这也是乱码产生的原因。如果数据库以一种单字节字符集存储数据,但是客户(如一个Java 应用,因为Java 语言使用Unicode)希望数据采用多字节表示,就必须执行转换,只有这样客户应用才能使用这些数据。

ORACLE支持的Unicode字符集有以下几种,下面的列表给出了字符集的名称、对应的数据库版本范围、采用的Unicode的版本。

AL24UTFFSS:是ORACLE第一种支持Unicode的字符集,从7.2版本开始使用,但是它支持的Unicode版本为1.1,因此从9i开始就不支持此字符集了。

UTF8 : 是ORACLE从ORACLE8开始使用的属于UTF-8编码的字符集,从ORACLE8.0到ORACLE8.16,Unicode版本为2.1,而ORACLE817到10g,采用的Unicode标 准为3.0

UTFE :用于EBCDIC码平台上的数据库Unicode字符集。因此它属于专用系统使用的字符集,其它属性与UTF8基本相同。

AL32UTF8 :是从ORACLE9开始使用的属于UTF-8编码的字符集,与UTF8相比,它采用的Unicode版本更新,在10g版本中使用的是Unicode 4.01标准,而UTF8因 为兼容性的考虑,在10g版本中用的是Unicode 3.0标准。

AL16UTF16:是ORACLE第一种采用UTF-16编码方式的字符集,从ORACLE9开始使用,是作为缺省的国家字符集使用,它不能被用作数据库的字符集。这是因为数 据库的字符集决定了SQL与PL/SQL源码的编码方式,对于UTF-16这种使用固定的两个字节来表示英文字母的编码方案来说,确实不适于用作数据库 的字符集,ORACLE目前采用的数据库字符集都是基于ASCII或EBCDID作为子集的编码方案。

对于US7ASCII,表示区域是US,用7个比特位表示一个字符,标准的字符集名称为ASCII。

对于中文字符集ZHS16GBK,表示简体中文(ZHT为繁体中文),一个字符需要16位比特,标准的字符集名称为GBK。而ZHS16CGB231280表示简体中文,一个字符需要16位比特,标准的字符集名称为GB231280,属于我们前面提过的1981年发布的GB2312-80标准。虽然我们说,GBK编码标准是GB2312编码标准的扩展,但是数据库字符集ZHS16GBK与ZHS16CGB231280之间却不是严格的超集与子集的关系,主要是有些汉字的编码在两个字符集中的数值是不同的,因此它们进行字符集转换时会出现问题。

查看字符集参数

1:查看NLS_CHARACTERSET:字符集,NLS_NCHAR_CHARACTERSET:国家字符集

实例字符集环境

SELECT * FROM NLS_INSTANCE_PARAMETERS

主要涉及NLS_LANGUAGE、NLS_TERRITORY的值. NLS_INSTANCE_PARAMETERS其来源于v$parameter,注意:网上很多资料都说"NLS_INSTANCE_PARAMETERS 表示客户端的字符集的设置,可以是参数文件,环境变量或者是注册表",而且网上都人人亦云。记住它是表示实例的字符集环境。

数据库可用字符集参数设置

SELECT * FROM V$NLS_VALID_VALUES

数据库服务器字符集

SELECT * FROM NLS_DATABASE_PARAMETERS

NLS_DATABASE_PARAMETERS其来源于props$,是表示数据库的字符集。

时间: 2024-08-21 09:09:46

ORACLE字符集基础知识的相关文章

你必须了解的Oracle存储过程基础知识

商业规则和业务逻辑可以通过程序存储在Oracle中,这个程序就是存储过程. 存储过程是SQL, PL/SQL, Java 语句的组合,它使你能将执行商业规则的代码从你的应用程序中移动到数据库.这样的结果就是,代码存储一次但是能够被多个程序使用. 要创建一个过程对象(procedural object),必须有 CREATE PROCEDURE 系统权限.如果这个过程对象需要被其他的用户schema 使用,那么你必须有 CREATE ANY PROCEDURE 权限.执行 procedure 的时

Oracle锁基础知识

001 引言     在任何多用户数据库应用程序中,最终免不了会出现两个用户希望同时使用同一行的情况.数据库必须确保这在物理上不可能实现.事务的隔离性原则要求数据库确保:在一个会话的事务完成之前,另一个会话的事务不能影响此会话.为此,数据库必须对数据的并发访问进行串行化,必须确保即使多个会话请求同一行,它们实际上要按顺序排队.     借助于记录和表锁定机制,我们可以实现并发访问的串行化.Oracle数据库中的锁定是完全自动的.一般而言,只有在软件用质量较差的代码干扰自动锁定机制时,或业务分析出

oracle字符集文档

  Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台. 一. Oracle字符集相关知识 1 参数说明 影响oracle数据库字符集最重要的参数是NLS_LANG参数 Oracle的字符集命名遵循以下命名规则:      <Language><bit size><encoding

sql注入之必备的基础知识_数据库其它

什么是SQL注入(SQL Injection) 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击. mysql常用注释     #     --[空格]或者是--+     /*-*/ 在注意过程中,这些注释可能都需要进行urlencode. mysql认证绕过       ;%00     

Oracle基础知识-数据迁移

我们常需要对Oracle数据库进行迁移,迁移到更加高级的主机上.迁移到远程的机房上.迁移到不同的平台下 一.exp/imp: 这也算是最常用最简单的方法了,一般是基于应用的owner级做导出导入. 操作方法为:在新库建立好owner和表空间,停老库的应用,在老库做 [sql] view plaincopyprint? exp user/pwd owner=XXX file=exp_xxx.dmp log=exp_xxx.log buffer=6000000 传dmp文件到新库,在新库做 [sql

Oracle基础知识-启动Oracle常见疑难问题分析

实例和数据库的启动与关闭是DBA的重要职责之一.只有打开数据库,其他用户才能对数据库中的数据进行操作.一旦数据库关闭,便不能对其操作.对于DBA们来说,关闭和重新启动数据库以便优化.调整应用程序的运行是经常碰到的事情.如果用户已经进入了数据库,使用SHUTDOWN IMMEDIATE 或SHUTDOWN ABORT命令来执行关闭数据库,则用户将失去连接,直到数据库重新启动.经常关闭和启动会对数据库性能造成一定的影响,当然也会影响到用户对数据库的使用.本文从管理数据库的角度来分析在Oracle启动

Oracle基础知识-Oracle不同的启动关闭方式

Oracle中不同启动和关闭方式的区别 Oracle数据库提供了几种不同的数据库启动和关闭方式,本文将周详介绍这些启动和关闭方式之间的区别连同他们各自不同的功能.一.启动和关闭Oracle数据库 对于大多数Oracle DBA来说,启动和关闭Oracle数据库最常用的方式就是在命令行方式下的Server Manager.从Oracle 8i以后,系统将Server Manager的任何功能都集中到了SQL*Plus中,也就是说从8i以后对于数据库的启动和关闭能够直接通过SQL*Plus来完成,而

Oracle基础知识-oracle常用命令

日志管理 1.forcing log switches [sql] view plaincopyprint? sql> alter system switch logfile; 2.forcing checkpoints [sql] view plaincopyprint? sql> alter system checkpoint; 3.adding online redo log groups [sql] view plaincopyprint? sql> alter database

Oracle基础知识-SQL简单命令

SQL语句包括两个部分:1 DDL 数据定义语言 2 DML 数据控制语言 DDL: create:创建一个表 [html] view plaincopyprint? create table b( clob char(1) ); alter:增加已经定义的表列的分配 drop:删除一个表 desc:查看一个表的定义 DML: selelct: [html] view plaincopyprint? select * from b; insert: [html] view plaincopypr