我这里有一个安装在WIN2K上的 8.1.5.0.0 版本的数据库,由于操作系统与数据库管理系统的版本太老不太利于维护,我想将数据弄到一个新环境里(姑且不考虑程序兼容性等问题),新环境拟为WIN2K3+10G。我用的是EXP与IMP工具(据我了解它们应该没有字符集相关的参数),导入时会提示EXP时使用的字符集与IMP时的不一样,导入完成后中文全变乱码。原数据库的字符集设置为
NLS_CHARACTERSET=US7ASCII
NLS_NCHAR_CHARACTERSET=ZHS16GBK我是从9I开始接触ORACLE的,里面又有好几G的重要数据,因此我不敢对原服务器做任何修改,估计就算改了字符集设置,数据本身的编码也不会跟着变化。
想在新环境中做手脚,可是10G只有NLS_CHARACTERSET可以设成如8I中的设置,NLS_NCHAR_CHARACTERSET只能设为UTF8与AL16UTF16之一,如果改为其他值就会报“ORA-12714: invalid national character set specified”错误。有没有什么方法把NLS_NCHAR_CHARACTERSET设成ZHS16GBK呢?
如果说改NLS_NCHAR_CHARACTERSET的值不可行或是不合理,那么有没有什么工具可以在导出原数据时修改字符的编码以利于我将数据放入新环境?我有试过用PL/SQL Developer提供的“SQL Inserts”和“PL/SQL Developer”格式导出数据,但“SQL Inserts”格式不允许表中出现LONG型数据,不满足我的数据要求;“PL/SQL Developer”格式在正确导入一部分表的数据后,突然某个表无法完整导入,其后的所有表都没导入数据,看上去像是C语言里遇到'\0'的现象。
再或者是不是10G及以上都不可能完成我所需要的任务了呢,那么我是该选用9I(跟10G一样不能把NLS_NCHAR_CHARACTERSET设成ZHS16GBK)还是继续死守8I?以我微薄的经验看,我这服务器上的8I连DBCA删除一个数据库都成问题,实在不敢面对维护8I的日子啊。请各位大虾给点指示,真的很苦闷
NLS_CHARACTERSET=US7ASCII
NLS_NCHAR_CHARACTERSET=ZHS16GBK我是从9I开始接触ORACLE的,里面又有好几G的重要数据,因此我不敢对原服务器做任何修改,估计就算改了字符集设置,数据本身的编码也不会跟着变化。
想在新环境中做手脚,可是10G只有NLS_CHARACTERSET可以设成如8I中的设置,NLS_NCHAR_CHARACTERSET只能设为UTF8与AL16UTF16之一,如果改为其他值就会报“ORA-12714: invalid national character set specified”错误。有没有什么方法把NLS_NCHAR_CHARACTERSET设成ZHS16GBK呢?
如果说改NLS_NCHAR_CHARACTERSET的值不可行或是不合理,那么有没有什么工具可以在导出原数据时修改字符的编码以利于我将数据放入新环境?我有试过用PL/SQL Developer提供的“SQL Inserts”和“PL/SQL Developer”格式导出数据,但“SQL Inserts”格式不允许表中出现LONG型数据,不满足我的数据要求;“PL/SQL Developer”格式在正确导入一部分表的数据后,突然某个表无法完整导入,其后的所有表都没导入数据,看上去像是C语言里遇到'\0'的现象。
再或者是不是10G及以上都不可能完成我所需要的任务了呢,那么我是该选用9I(跟10G一样不能把NLS_NCHAR_CHARACTERSET设成ZHS16GBK)还是继续死守8I?以我微薄的经验看,我这服务器上的8I连DBCA删除一个数据库都成问题,实在不敢面对维护8I的日子啊。请各位大虾给点指示,真的很苦闷
我的问题中有说明,9I已经无法设置8I中那种NLS_NCHAR_CHARACTERSET值了。
9i是新安装的,设置不了那个值?安装的时候选择上原有的数据库字符集就可以了呀。怎么会没有呢?注意是数据库字符集和国家字符集(这个是NVARCH的)。 两个都和8i的对应上。
不好意思,一直没把图片上传的问题解决好。总之9I默认安装好是不支持国家字符集设成ZHS16GBK的。参考http://www.sqlclub.cn/oraclebasic/2009-04/3712.htm把数据库启动到restricted session,然后用命令
alter database national character set INTERNAL_CONVERT ZHS16GBK;
此法行不通。我已经说了N遍了,在9I和10G中都会报“ORA-12714: invalid national character set specified”错误。谢谢各位!小弟热切等候各位的帮助。
应该是所有的中文数据都变乱码,我见有些字段是char类型的,估计nchar类型不多甚至是没有用到。
那NLS_NCHAR_CHARACTERSET可以不管了。你在9i中NLS_CHARACTERSET=US7ASCII,NLS_NCHAR_CHARACTERSET随便用一个。
注意做exp和imp操作所在主机的环境变量nls_lang中的字符集都用US7ASCII
也不知之前是怎么搞的,会坚信NCHAR也得设置成一样。可能是由于断断续续地,脑海中出现幻像了吧。不服气,再试一次贴图