ITPub博客

首页 > Linux操作系统 > Linux操作系统 > zhs16gbk的dmp导入到utf8字符的库中

zhs16gbk的dmp导入到utf8字符的库中

原创 Linux操作系统 作者:itpot 时间:2008-04-14 20:01:08 0 删除 编辑

将原来的zhs16gbk 导出的dmp 导入到utf-8的库中

验证当前的字符集
select * from v$nls_parameters
select name,value$ from sys.props$ where name='NLS_CHARACTERSET'

问题

IMP-00019: 由于 ORACLE 错误 12899 而拒绝行
IMP-00003: 遇到 ORACLE 错误 12899
ORA-12899: 列 ****的值太大 (实际值: 11, 最大值: 10)

原因

中文在UTF8里占3个字节,ZHS里占2个字节。

length求得是字符长度, 
  lengthb求得是字节长度。

SELECT 'EN', length('EN') x, lengthb('EN') xb FROM dual;
           2         2
英文的长度 两种字符集下不变

SELECT '中文', length('中文') x, lengthb('中文') xb FROM dual;


中文   x   xb
       2   4


utf-8库
SELECT '中文', length('中文') x, lengthb('中文') xb FROM dual;


中文   x   xb
       2   6

解决:

在原zhs库中

得到批量修改语句


select 'alter table ' || utc.table_name || ' modify ' || utc.column_name ||
       ' varchar2('||utc.data_length*2||');'
  from user_tab_cols utc  WHERE  utc.column_name!='ID' and  data_type='VARCHAR2'

批量加大字段的长度后 再导出  dmp 然后导入到utf-8字符集的库中

 

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

上一篇: truncate delete 区别
下一篇: 子网掩码
全部评论

注册时间:2007-12-27

  • 博文量
    39
  • 访问量
    56689