DBA字符集管理(一)

原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任。

深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/45749187

最近对字符集进行了相关的学习,通过查看相关书籍、在网上找找学习视频,在此结合学习笔记对字符集做一次简单总结。

通过一种自问自答的形式,希望可以帮助读者对字符集的知识做一次梳理。

【不耻下问】

问题1:字符集的概念?

字符集,是字符和编码的对应“表”,我们可以把其理解成一张对应表。之所以需要字符集,是由于计算机中只能存储数字,我们想通过计算机获得字符,因此采用了一个手段,让计算机将字符对应成编码存储起来,这样计算机通过查找数字编码就可以找到相应的字符,从而实现显示字符的目的。

问题2:在IT系统体系中,哪些结构是存在字符集的?

1、操作系统有操作系统字符集;

2、oracle有数据库字符集;

3、其它软件本身所带的字符集。

问题3:查看字符集的命令?

win:chcp

linux下面查看字符集:

[[email protected] ~]# locale

locale -a//linux所支持的所有字符集

oracle下面查看字符集:

SQL> select * from v$NLS_PARAMETERS;

补充:字符集常识

zh_HK.big5hkscs:大五码:香港用的!
unicode: 国家字符集
zh_SG.gbk:国标库
936:windows操作系统下代表中文字符集
补充完毕。

问题4:字符集的使用情况?

需要存储和显示字符的时候会用到字符集。在一个系统中,例如oracle本身自带有字符集,因此oracle使用本身的字符集。而有些软件是不带字符集的,它们会选择使用操作系统字符集。所以在判断软件使用的字符集是什么的前提下,先确定软件是使用本身自带的字符集还是使用操作系统的字符集。

对于数据库字符集,在数据类型的选择上,如果不存在字符型的数据类型,可以不考虑字符集。但日常的应用系统中,数据库中都会存在如varchar2这样的数据类型,这是一定要用到字符集的。因为这样的字段下用来存储的是字符。如char、varchar2、clob、long这些都是用来存放字符的。char代表定长的,varchar2代表变长的,clob代表大对象,比如说一篇文章,long代表大对象。

另外,数据中字符集还是用来标示诸如表名、列名以及PL/SQL变量等。同时数据库中的字符集也可以用来存储SQL和PL/SQL程序单元等。

除了数据库字符集以外,另外一种是国家字符集。它是用来存储NCHAR、NVARCHAR2、NCLOB等类型数据。也就是如果数据类型为varchar2这类,数据库会选择数据库字符集,如果是NVARCHAR2这类,数据库会选择使用国家字符集。

对于数据库字符集和国家字符集,我们可以直观的看一下。在oracle安装过程中,有两个地方涉及到设置字符集,1、数据库字符集、2、国家字符集。如下图:

实验:查看数据库的字符集?

SQL>  select * from nls_database_parameters

数据库字符集:NLS_CHARACTERSET:zhs16gbk:中文字符集

NLS_NCHAR_CHARACTERSET:国家字符集:AL16UTF16

国家字符集是作为数据库字符集的一种补充。

问题5:字符集的命名?

字符集根据存储字符的不同区分出不同的字符集种类,关注字符集时需要留意字符集可以存储哪些字符。

举几个字符集的例子:

1、US7ASCII:只能存储美国人使用的字符。不超过128个。ASC码是用1个字节8位表示格式:US代表语言,7代表七位,ASCII代表编码。

2、zhs16cgb231280:中文字符集(国标),较老的字符集,其中并未存储完全所有中文字符。

3、zhs16gbk:最新的中文字符集。是zhs16cgb231280的超集。但不意味着严格超集(严格超集规定字符编码是相同的才可以叫严格超集)。

4、utf8:属于unicode字符集,unicode字符集是很多国家联合起来制定的标准。用来存储多国语言的字符集。之后推出了utf8,但并未做到unicode那样存储所有国家的字符集。

5、AL32UTF8:属于unicode字符集,比较新的,比utf8范围广的字符集。如果要用unicode字符集就选用AL32UTF8字符集。通常对于数据库字符集会选择AL32UTF8。

6、AF16UTF16:属于unicode字符集,对于国家字符集,一般统一选择“AF16UTF16”。AF16UTF16字符集也是unicode字符集。

如果规划数据库会存储中文字符,国家字符集一般选择“AF16UTF16”。数据库字符集设为“AL32UTF8”或“ZHS16GBK”。但是AL32UTF8字符集中,中文字符所对应的编码会占用更多的空间。也就是说AL32UTF8字符集在性能上会差一些(虽然全,但性能会打折扣,因为会占用更大的空间意味着网络、I/O等会有更大的负载)。因此,我们在数据库字符集上常常选择“ZHS16GBK”。

小结:

(1)、数据库字符集的选择,如果只存中文,选择zhs16gbk,如果是国际跨国企业,选择AL32UTF8字符集;

(2)、国家字符集选择“AF16UTF16”。

问题6:如何查看我们可以选择的字符集有哪些?

SQL> select * from v$NLS_VALID_VALUES;

--可以查看到oracle支持499种字符集

通过以上我们可以知道,oracle支持所有字符集。

问题7:对于跨国企业,需要选择怎样的字符集?

比如说oracle公司存在美国员工、中国员工、韩国员工、日本员工,需要存储多国的语言,因此选择unicode字符集。

问题8:对于繁体字符集选择应该注意哪些?

对于繁体字符集分为香港和台湾两种,香港常使用香港大五码,台湾常使用台湾的字符集。

问题9:字符集命名规则?

<Language><bit size><encoding>

<语言><比特位数><编码>

例:ZHS16GBK:中文,16位,国标库字符集

常用字符集,参看问题5。

致谢:

整理字符集知识,部分内容学习,源自甲骨论论坛中oracle开源视频教程,感谢相克军老师分享。

原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任。

深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/45749187

时间: 2024-08-05 14:55:27

DBA字符集管理(一)的相关文章

DBA管理脚本大全

一:基于sqlserver数据库段,连接mysql,oracle数据库采用数据库链接方式 GO --功能:对比多数据库之间的结构关系异同,方便DBA统一管理 --调用: --EXEC COMPARE_DBTODB '','OPENVONE',2,'MYSQL1','OPENVONE',3 --EXEC COMPARE_DBTODB 'ORACLE2','OPENVONE',3,'','OPENVONE',2 --EXEC COMPARE_DBTODB 'ORACLE2','OPENVONE',1

MySQL之权限管理

MySQL权限简介 权限简单的理解就是mysql允许权力以内的事情,不可越界.比如只允许执行select操作,那么就不能执行update操作.只允许从某台机器上连接mysql,那么就不能从除那台机器以外的其他机器连接mysql. 那么Mysql的权限是如何实现的呢?这就要说到mysql的两阶段验证,下面详细介绍: 第一阶段:服务器首先会检查是否允许连接.因为创建用户的时候会加上主机限制,可以限制成本地.某个IP.某个IP段.以及任何地方等,只允许从配置的指定地方登陆. 第二阶段:如果能连接,My

What is your definition of a DBA?

What is your definition of a DBA?     你对DBA的定义是什么? Today we have a guest(特邀的) editorial(社论)as Steve is traveling to the UK. 今天我们有一篇特邀社论是Steve游历英国. OK,I know the easy answer is a Database Administrator,but what role is that?If you had to describe it t

你对DBA的定义是什么?

作者: Ben Kubicek, 2017/09/05 翻译文章的链接:http://www.sqlservercentral.com/articles/Editorial/160538/ 今天我们有一个客人编辑史蒂夫是前往英国. 好吧,我知道最简单的答案是数据库管理员,但作用是什么呢?如果你必须描述它非技术的人你会说什么?有一个DBA可以有许多不同的角色和功能.我见过一些角色或功能/做的是:安装SQL Server管理服务器性能包括磁盘空间利用率.备份.管理控制和用户的访问的权利/角色,管理复

[oracle]Oracle角色管理

假如我们直接给每一个用户赋予权限,这将是一个巨大又麻烦的工作,同时也不方便DBA进行管理.通过采用角色,使得: 权限管理更方便.将角色赋予多个用户,实现不同用户相同的授权.如果要修改这些用户的权限,只需修改角色即可: 角色的权限可以激活和关闭.使得DBA可以方便的选择是否赋予用户某个角色: 提高性能,使用角色减少了数据字典中授权记录的数量,通过关闭角色使得在语句执行过程中减少了权限的确认. (1)角色的信息存在dba-roles数据字典中,如下所示: (2)创建角色: CREATE ROLE r

MySQL Study之--MySQL用户及权限管理

MySQL服务器通过MySQL权限表来控制用户对数据库的访问,MySQL权限表存放在mysql数据库里,由mysql_install_db脚本初始化.这些MySQL权限表分别user,db,table_priv,columns_priv和host.下面分别介绍一下这些表的结构和内容: user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的.db权限表:记录各个帐号在各个数据库上的操作权限.table_priv权限表:记录数据表级的操作权限.columns_priv权限表:记录数

Mysql grant权限管理

MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 [identified by '密码'] 最常用的,弄主从同步的时候,给从库的slave用户设置拥有所有权限,权限all 仅允许其从192.168.0.2登录,并限定使用密码 funsion (密码要用 单/双引号 括起来) grant all on *.* to slave@192.168.0.2 identified by 'funsion'; 执行完毕后,记得用 FLUSH PRIVILEGE

你对于DBA的定义是什么

原文链接:http://www.sqlservercentral.com/articles/Editorial/160538/ 原文作者:Ben Kubicek 翻译:今天我们有一个客人前往英国,他是编辑史蒂夫. 好吧,我知道最简单的答案是数据库管理员,但它真正的作用是什么呢?如果你必须描述它是非技术的人你会说什么?一个DBA有很多不同的角色和功能.我见过一些角色或功能做的是:安装SQL Server管理服务器性能包括磁盘空间利用率.备份,管理控制和用户的访问的权利/角色,管理复制和不间断/多个

The Accidental DBA:Troubleshooting

最近重新翻看The Accidental DBA,将Troubleshooting部分稍作整理,方便以后查阅.此篇是Part 3Part 1:The Accidental DBA:SQL Server BackupPart 2:The Accidental DBA:Troubleshooting Performance一.Wait Statistics Analysis当SQL Server执行一项任务,如果它需要等待(页面释放锁.从磁盘读取页面到内存.事务日志写入),SQL Server会记录