数据库字符集实验

             数据库字符集

首先,在创建数据库的时候会让你选择两种字符集,一种是数据库字符集,一种是国家字符集。数据库字符集就是说明数据库中用哪种编码存储。一般中文的话选择gbk16.国家字符集就2种,一个是al16utf16,一个utf8.

一、         国家字符集

首先弄清楚国家字符集配置后有什么不一样。通过读9ioracle文档,我觉得这个参数主要是设置nvarchar2ncharnlob等字符在数据库中的存储方式。Al16utf16是固定宽度双字符存储。Utf8是可变宽度的存储,每存储一个字符,英文1-2个字节,存储中文3个字节。也就是说国家字符集主要影响的是存储字符所占用的空间,(不会产生乱码问题)。

  当数据库中存储大量英文字符,而比较少或者没有中文时候,国家字符集选用utf8会比较节省空间。

  当数据库中存储大量中文字符,国家字符集选取al16utf16会比较节省空间。

  注意:再次声明国家字符集选择不正确只是浪费空间,不会影响字符的显示,而且仅对于nvarchar2nvarchar等国家字符字段有效

实验:两个数据库国家字符不一样。都创建如下表

Create table a (a1 nvarchar2(10),a2 nchar(10));

然后查询每个字段占用的字节数

Select column_name,char_length,data_length from user_tab_colums where table_name=’A’;

可以看都是10个字符的长度,但是占用的字节数不一样。

 

二、         数据库字符集

数据库字符集选则要非常慎重,选择不正确会影响表中的记录。

 NLS_LANG = language_territory.charset

在安装数据库的时候会选择几个参数,分别是默认语言,默认日期格式,字符集。其中默认语言就是Language,默认日期格式就是territory,字符集就是charset。貌似默认语言,默认日期格式不会对系统产生什么过大的影响。(可以改变session的参数)

字符集主要有oracle serveroracle client

2.1Oracle client字符集主要通过NLS_LANG查看

Window操作系统中可以查看注册表中的NLS_LANG

Unix系统中可以echo $NLS_LANG

2.2oracle server字符集通过数据库查看

Select * from nls_database_parameter

 

三、         关于字符集的实验

实验1

实验环境:一台主机上两个实例,数据库字符集都一样,国家字符集一个al16utf16   test,一个国家字符集utf8   test2.

 

1)Test

select * from nls_database_parameter

2)test2

select * from nls_database_parameter

可以看出两个国家字符集不一样

 

3)导出

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

 

即将导出指定的表通过常规路径...

. . 正在导出表                               B导出了           2

成功终止导出, 没有出现警告。

4)导入

 

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

经由常规路径由 EXPORT:V10.02.01 创建的导出文件

已经完成 ZHS16GBK 字符集和 UTF8 NCHAR 字符集中的导入

导出服务器使用 AL16UTF16 NCHAR 字符集 (可能的 ncharset 转换)

. 正在将 AAA 的对象导入到 AAA

. 正在将 AAA 的对象导入到 AAA

. . 正在导入表                             "B"导入了           2

成功终止导入, 没有出现警告。

5)在test2上查询效验是否正确

 

 

 

实验2

不同的国家字符集,不同的数据库字符集

 

下面创建了一个test3

可以看出国家字符集utf8,数据库字符集us7ascii(我随便选的)

2)test1的导出文件导入数据

 

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

经由常规路径由 EXPORT:V10.02.01 创建的导出文件

已经完成 ZHS16GBK 字符集和 UTF8 NCHAR 字符集中的导入

导入服务器使用 US7ASCII 字符集 (可能的字符集转换)

导出服务器使用 AL16UTF16 NCHAR 字符集 (可能的 ncharset 转换)

. 正在将 AAA 的对象导入到 AAA

. 正在将 AAA 的对象导入到 AAA

. . 正在导入表                             "B"导入了           2

成功终止导入, 没有出现警告。

3)查看数据库字符集数据

4)导入国家字符集

可以看出由于数据库字符集不兼容,所以导入的中文全部乱码了,而导入的国家字符集可以兼容。

 

 

 

看一下不同数据库字符集,相同国家字符集

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

经由常规路径由 EXPORT:V10.02.01 创建的导出文件

已经完成 ZHS16GBK 字符集和 UTF8 NCHAR 字符集中的导入

导入服务器使用 US7ASCII 字符集 (可能的字符集转换)

. 正在将 AAA 的对象导入到 AAA

. 正在将 AAA 的对象导入到 AAA

. . 正在导入表                             "B"导入了           4

. . 正在导入表                             "C"导入了           1

成功终止导入, 没有出现警告。

可以看出数字库字符转换了,国家字符没转换

 

 

另外对于导入的信息

经由常规路径由 EXPORT:V10.02.01 创建的导出文件

已经完成 ZHS16GBK(导出的数据库字符集或者是客户端字符集) 字符集和 UTF8(导入的国家字符集) NCHAR 字符集中的导入

导入服务器使用 US7ASCII(导入的数据库字符集) 字符集 (可能的字符集转换)

导出服务器使用 AL16UTF16 NCHAR(导出的国家字符集) 字符集 (可能的 ncharset 转换)

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9524377/viewspace-631583/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9524377/viewspace-631583/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值