欢迎投稿

今日深度:

【体系结构,13】oracle的字符集详解,oracle字符集

【体系结构,13】oracle的字符集详解,oracle字符集


一.字符集的简单理解:
字符集: 字符与编码对应的表。 当软件有字符集,就是使用自己的字符集,如果软件没有字符集就使用OS字符集。
二.字符集的使用场合:
1.oracle有两种字符集:数据库字符集和国家字符集 。当安装数据库时选择了这两种字符集。                  数据库字符集 的使用场合: (1)用来存储CHAR, VARCHAR2, CLOB, LONG等类型数据 (2)用来标示诸如表名、列名以及PL/SQL变量等 (3)用来存储SQL和PL/SQL程序单元等       国家字符集的使用场合: (1)用以存储NCHAR, NVARCHAR2, NCLOB等类型数据



2.查看数据库的字符集:
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               WE8ISO8859P1     --数据库字符集 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              10.2.0.1.0
20 rows selected.
三.字符集的命名:

Oracle的字符集命名遵循以下命名规则: <Language><bit size><encoding> 即:  <语言><比特位数><编码> 比如: ZHS16GBK表示采用GBK编码格式、16位(两个字节)简体中文字符集 常见字符集: US7ASCII          美国人常用的字符 zhs16cgb231280     较老的中文字符集, 只针对中国人使用。 AL32UTF8       是unicode最新字符集,比utf8字符集要多。一般选为数据库字符集。 AF16UTF16    国家字符集统一选AF16UTF16 ZHS16GBK    较新的中文字符集, ZHS16GBKzhs16cgb231280字符集的超集,但不是严格超集。 utf8
2.查看oracle所有字符集
select * from V$NLS_VALID_VALUES;
3.查看OS的字符集:  linux: locale,locale -a  windows: chcp
四.客户端OS字符集、NLS_LANG设置、服务器端OS字符集、Oracle数据库字符集:

1.客户端软件sqlplus没有字符集, 使用的是操作系统的字符集。 2.如果软件有字符集,则操作系统字符集失效。所以oracle不会用操作系统的字符集。 3.所有的字符集转换都是在oracle端转换的。 4.主要流程: 使用sqlplus输入中文,使用操作系统字符集对中文进行编码。然后传到oracle。当oracle的字符集与客户端的字符集不一致时,oracle要将编码转成字符,然后使用数据库的字符集将字符重新编码再保存起来。 5.oracle如何知道客户端的字符集: oracle通过NLS_LANG参数知道客户端的字符集。 在客户端设置NLS_LANG参数. 设置客户端的字符集:set NLS_LANG=american_america.zhs16gbk
6.如何设置字符集:
①.客户端操作系统的字符集: 中文, UTF8. ②.oracle字符集: 一般在创建数据库时指定。 ③.客户端NLS_LANG参数设置: 一定要与客户端操作系统的字符集一致
五.NLS_LANG的设置:一定要与客户端操作系统的字符集一致
1.设置格式: NLS_LANG=<language>_<territory>.<client character set>      Language:显示oracle消息,校验,日期命名     Territory:指定默认日期、数字、货币等格式     Client character set:指定客户端将使用的字符集     例如:NLS_LANG=AMERICAN_AMERICA.US7ASCII       AMERICAN是语言,AMERICA是地区,US7ASCII是客户端字符集


六.实例:查看数据的字符编码
# dump(name,1016):表示将name这一列以16进制直接显示出来,10表示查询结果中显示CharacterSet   select id, name , dump(name,1016) from t2;    #查看你好的字符编码 SQL> select dump('你好',1016) from dual; DUMP('你好',1016) ----------------------------------------------- Typ=96 Len=4 CharacterSet=ZHS16GBK: c4,e3,ba,c3
# SQL> select dump('你好',16) from dual;
DUMP('你好',16) ------------------------- Typ=96 Len=4: c4,e3,ba,c3



怎查询Oracle的字符集

一、什么是oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。 影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中: Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK 从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。 二、 很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确导入。 1、查询oracle server端的字符集 有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:SQL>select userenv('language') from dual; 结果类似如下:AMERICAN _ AMERICA. ZHS16GBK
 

怎查看Oracle数据库字符集,详细操作,xx

数据库服务器字符集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。

涉及三方面的字符集,
1. oracel server端的字符集;
2. oracle client端的字符集;
3. dmp文件的字符集。

在做数据导入的时候,需要这三个字符集都一致才能正确导入。

2.1 查询oracle server端的字符集
有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

SQL>select userenv(‘language’) from dual;
AMERICAN _ AMERICA. ZHS16GBK

2.2 如何查询dmp文件的字符集
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;
ZHS16GBK

如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):
cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
然后用上述SQL也可以得到它对应的字符集。

2.3 查询oracle client端的字符集
在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,
比如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK
这样就只影响这个窗口里面的环境变量。

在unix平台下,就是环境变量NLS_......余下全文>>
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/3189.html NewsArticle 【体系结构,13】oracle的字符集详解,oracle字符集 一.字符集的简单理解: 字符集: 字符与编码对应的表。 当软件有字符集,就是使用自己的字符集,如果软件没有字符集就使用OS字符...
评论暂时关闭