首页 / ORACLE / Oracle字符集(一)
Oracle字符集(一)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Oracle字符集(一),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5633字,纯文字阅读大概需要9分钟。
内容图文
![Oracle字符集(一)](/upload/InfoBanner/zyjiaocheng/530/58e60e0376c246239b6ec98c5a7dcd75.jpg)
1.1 选择字符集的原因: 由于ASCII字符编码定义了128个字符,而且只有95个可显示字符,这是远远不够的,如果oracle需要存放多种国家的字符,那么建议使用unidoce编码。如果只是为了显示中文,那么就只需要选择合适的编码了,这样可以减少没用的网络传输(utf
1.1 选择字符集的原因:
由于ASCII字符编码定义了128个字符,而且只有95个可显示字符,这是远远不够的,如果oracle需要存放多种国家的字符,那么建议使用unidoce编码。如果只是为了显示中文,那么就只需要选择合适的编码了,这样可以减少没用的网络传输(utf8实际采用了2-4个字节!!)。
1.2 选择字符集
创建数据库时需要选择两种字符集:
字符集:主要用来存储char,varchar2等数据类型;标识表名,列名,pl/sql变量;存储sql和pl/sql代码等;
国家字符集:用来存放nchar,nvarchar2,nclob等类类型。
字符集选择后,可以容纳的字符就确定了,在进行字符集转换时候需要注意,目的字符集是否是源字符集的超集。需要
意的是,GBK并不是GB2312严格意义上的超集。虽然GB2312表示的字符在GBK中就存在,但是同样的编码在这两个字符集中可能表达不同的汉字
字符集命名法:
1.3 字符集文件和字符支持
Oracle服务器端(通常在目录$ORACLE_HOME/nls/data)存放了三类文件分别用来定义语言(nls_lang),区域(nls_terroitory),字符集(nls_characterset).其中中文语言文件是lx00023.nlb。语言字符集往往与客户端显示相关,通常NLS_LANG可以设置客户端的显示方式。常用信息比如星期,月份,时间都可以由这个文件控制显示
中文字符集(ZHS16GBK)文件是LX20354.NLB。通过这个字符集文件oracle就建立了每个汉字和16 bits编码的对应关系了。
查看当前数据库使用的字符集:
SYS > select name,value$ from props$ where name='NLS_CHARACTERSET';
NAME |VALUE$
------------------------------|------------------------------
NLS_CHARACTERSET |ZHS16GBK
查看某个汉字的字符编码:
SQL> select dump('刘') from dual;
DUMP('刘')
---------------------
Typ=96 Len=2: 193,245
SQL> select to_number('c1F5','xxxx') from dual;
TO_NUMBER(' c1F5','XXXX')
-------------------------------------
49653
两个字节可以表示65536个字符,查看某个十进制数表示的字符:
SQL> select chr(49653) from dual;
CH
--
刘
1.4 客户端字符集支持
客户端设置了字符集,但是自己没有字符集文件,也是没法启动sqlplus的,如果把客户端设置为
C:\Users\HuangXing>set nls_lang=american_america.zhs16gbk
那么结果:show parameter:
SYS >show parameter nls
NAME |TYPE |VALUE
------------------------------------|-----------|------------------------------
nls_calendar |string |GREGORIAN
nls_comp |string |BINARY
nls_currency |string |$
nls_date_format |string |yyyy-mm-dd hh24:mi:ss
nls_date_language |string |AMERICAN
nls_dual_currency |string |$
nls_iso_currency |string |AMERICA
nls_language |string |AMERICAN
nls_length_semantics |string |BYTE
nls_nchar_conv_excp |string |FALSE
nls_numeric_characters |string |.,
nls_sort |string |BINARY
nls_territory |string |AMERICA
nls_time_format |string |HH.MI.SSXFF AM
nls_time_tz_format |string |HH.MI.SSXFF AM TZR
nls_timestamp_format |string |DD-MON-RR HH.MI.SSXFF AM
nls_timestamp_tz_format |string |DD-MON-RR HH.MI.SSXFF AM TZR
Show parameter 结果中有的参数的值由客户端决定,本例即时如此。NLS_LANG格式为:
NlLS_LANG=
1.5 实验:移除了字符集文件,导致数据库无法启动
bash-4.1$ mv lx20354.nlb lx20354.nlb.bak
修改客户端nls_lang环境变量,用sysdba登录成功,但是启动数据库时仍报错:
bash-4.1$ NLS_LANG=AMERICAN_AMERICA.US7ASCII
bash-4.1$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Sat Apr 6 21:58:17 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> STARTUP;
ORACLE instance started.
Total System Global Area 217120768 bytes
Fixed Size 2227016 bytes
Variable Size 125830328 bytes
Database Buffers 83886080 bytes
Redo Buffers 5177344 bytes
ORA-12709: error while loading create database character set
修改了nls_lang环境变量,只是表明sqlplus可以根据新的环境变量进行客户端初始化,但是在启动数据库时候,还是会读取字符集文件,所以启动失败,而且无法执行各种sql语句。可以追踪这个过程:
如果在客户端删除了这个文件,改变nls参数,可以远程登录数据库,但是查看中文字符会出现?(表示无法解析的字符),这是客户端解析错误所致:
结论,字符集文件是sqlplus和oracle软件必须的。
1.3 修改字符集:
SQL> alter database character set zhs16cgb231280;
alter database character set zhs16cgb231280
*
ERROR at line 1:
ORA-12712: 新字符集必须为旧字符集的超集
STARTUP MOUNT;
ALTER SESSION SET SQL_TRACE=TRUE;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> show parameter JOB_QUEUE_PROCESSES;
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
job_queue_processes integer
1000
SQL> show parameter AQ_TM_PROCESSES;
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
aq_tm_processes integer
1
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
--ALTER DATABASE CHARACTER SET AL32UTF8;
--跳过子集超集检验步骤如下:
ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;
SHUTDOWN IMMEDIATE;
STARTUP
内容总结
以上是互联网集市为您收集整理的Oracle字符集(一)全部内容,希望文章能够帮你解决Oracle字符集(一)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。