首页 > 代码库 > 【体系结构,13】oracle的字符集详解
【体系结构,13】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 较新的中文字符集, ZHS16GBK是zhs16cgb231280字符集的超集,但不是严格超集。
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
【体系结构,13】oracle的字符集详解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。