概述
将原来的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字符集的库中
最后
以上就是有魅力芹菜为你收集整理的oracle从gbk导出后导入utf8,zhs16gbk的dmp导入到utf8字符的库中的全部内容,希望文章能够帮你解决oracle从gbk导出后导入utf8,zhs16gbk的dmp导入到utf8字符的库中所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复