现有一数据库,字符集为UTF8字段中存储的中文字符为双字节GBK格式,而正常情况下UTF8的中文应该是三字节请问:如何利用oracle的相关命令将这些双字符的中文字符转换为三字节的UTF8格式?

解决方案 »

  1.   

    参考:
    http://topic.csdn.net/u/20090111/12/9eb8eacd-17e7-4474-9857-0c4282a2ddcb.html
      

  2.   


    从网上找了一些信息,希望对楼主有用:sql> shutdown immediate 
    sql> startup mount 
    sql> alter system enable restricted session; 
    sql> alter system set job_queue_processes=0; 
    sql> alter system set aq_tm_processes=0; 
    sql> alter database open; 
    sql> alter database character set <internal_use> AL32UTF8; 
    sql> shutdown immediate 
    sql> startup 这里的INTERNAL_USE可选,譬如用于不能从父集转到子集的场合,但是这样做会产生乱码,或者表中的数据不能读取。 如果数据库中存在CLOB字段,那么就不允许对字符集进行转换,此时可以查看alert <sid>.log文件,把含有CLOB的表trancate. sql> trancate table [table_name]; 转换后的数据库字符集可以通过以下命令察看. sql> select name, value$ from props$ where name like '%NLS%'; 
      

  3.   

    楼上说的对,先把原来数据修改成UTF8,再进行导出,再导入UTF8的数据库。
      

  4.   

    都试过了,还是不行,不过使用convert函数可以转,但是这个太麻烦,因为字段很多,还是想找个能一次性搞定的办法
      

  5.   

    从GBK导出的数据,要导入UTF8数据库时,表结构的字段长度全部要增加50%。