数据库字符集
首先,在创建数据库的时候会让你选择两种字符集,一种是数据库字符集,一种是国家字符集。数据库字符集就是说明数据库中用哪种编码存储。一般中文的话选择gbk16.国家字符集就2种,一个是al16utf16,一个utf8.
一、 国家字符集
首先弄清楚国家字符集配置后有什么不一样。通过读9i的oracle文档,我觉得这个参数主要是设置nvarchar2,nchar,nlob等字符在数据库中的存储方式。Al16utf16是固定宽度双字符存储。Utf8是可变宽度的存储,每存储一个字符,英文1-2个字节,存储中文3个字节。也就是说国家字符集主要影响的是存储字符所占用的空间,(不会产生乱码问题)。
当数据库中存储大量英文字符,而比较少或者没有中文时候,国家字符集选用utf8会比较节省空间。
当数据库中存储大量中文字符,国家字符集选取al16utf16会比较节省空间。
注意:再次声明国家字符集选择不正确只是浪费空间,不会影响字符的显示,而且仅对于nvarchar2,nvarchar等国家字符字段有效
实验:两个数据库国家字符不一样。都创建如下表
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 server,oracle client。
2.1、Oracle client字符集主要通过NLS_LANG查看
Window操作系统中可以查看注册表中的NLS_LANG
Unix系统中可以echo $NLS_LANG
2.2、oracle 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/