This Domain(Admin5.com) is for Sale:

字符集问题的初步探讨

时间:2007-12-23  来源:不详  作者:迈克DB

设置,字符集将根据导入客户端NLS_LANG设置进行转换,假如必要,在数据插入数据库之前会进行进一步转换。
通常在导出时最好把客户端字符集设置得和数据库端相同,这样可以避免在导出时发生不必要的数据转换,导出文件将和数据库具有相同的字符集。
即使将来会把导出文件导入到不同字符集的数据库中,这样做也可以把转换延缓至导入时刻。
当进行数据导入时,主要存在以下两种情况:
1.源数据库和目标数据库具有相同字符集设置
这时,只需要设置NLS_LANG等于数据库字符集即可导入(前提是,导出使用的是和源数据库相同字符集,即三者相同)
2.源数据库和目标数据库字符集不同
假如我们导出时候使用的NLS_LANG是和源数据库相同的字符集,那么导入时就可以设置客户端NLS_LANG等于导出时使用的字符集,这
样转换只发生在数据库端,而且只发生一次。
例如:
假如进行从WE8MSWIN1252到UTF8的转换
1)使用NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252导出数据库。
这时创建的导出文件包含WE8MSWIN1252的数据
2)导入时使用NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
这时转换仅发生在insert数据到UTF8的数据库中。
以上假设的转换只在目标数据库字符集是源数据库字符集的超集时才能转换。假如不同,一般就需要进行一些非凡的处理。 本文来自织梦
我们简单看一下导入的转换过程(以Oracle8i为例):
1.确定导出数据库字符集环境
通过读取导出文件头,可以获得导出文件的字符集设置
2.确定导入session的字符集,即导入Session使用的NLS_LANG环境变量
3.IMP读取导出文件
读取导出文件字符集ID,和导入进程的NLS_LANG进行比较
4.假如导出文件字符集和导入Session字符集相同,那么在这一步骤内就不需要转换
假如不同,就需要把数据转换为导入Session使用的字符集。
然而这种转换只能在单byte字符集之间进行。
我们看一个测试:

E:ls2>setNLS_LANG=AMERICAN_AMERICA.US7ASCII

设置导入sessionNLS_LANG为US7ASCII

E:ls2>e:\oracle\ora8i\bin\impeygle/eyglefile=Sus7ascii-Cus7ascii-exp817.dmpfromuser=eygletouser=eygletables=test

这个导出文件是从US7ASCII数据库导出,导出客户端NLS_LANG也是US7ASCII

Import:Release8.1.7.1.1-ProductiononFriNov700:59:222003

(c)Copyright2000OracleCorporation.Allrightsreserved.

Connectedto:Oracle8iEnterpriseEditionRelease8.1.7.1.1-Production
WiththePartitioningoption
JServerRelease8.1.7.1.1-Production
内容来自dedecms


这时导入,在DMP文件和NLS_LANG之间不需要进行字符集转换。

ExportfilecreatedbyEXPORT:V08.01.07viaconventionalpath
importdoneinUS7ASCIIcharactersetandZHS16GBKNCHARcharacterset
importserverusesZHS16GBKcharacterset(possiblecharsetconversion)
exportserverusesUTF8NCHARcharacterset(possiblencharsetconversion)
..importingtable"TEST"2rowsimported
Importterminatedsuccessfullywithoutwarnings.


5.对于多Byte字符集的导入(如:UTF8)
需要设置导入Session字符集和导出字符集相同
否则就会碰到:IMP-16"Requiredcharactersetconversion(type%luto%lu)notsupported"错误。
:
E:ls2>setNLS_LANG=AMERICAN_AMERICA.ZHS16GBK

导入Session字符集设置为ZHS16GBK
导入US7ASCII的导出文件

E:ls2>e:\oracle\ora8i\bin\impeygle/eyglefile=Sus7ascii-Cus7ascii-exp817.dmpfromuser=eygletouser=eygle

Import:Release8.1.7.1.1-ProductiononFriNov700:38:552003

(c)Copyright2000OracleCorporation.Allrightsreserved.

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息