Oracle:从 WE8ISO8859P1 转换为 AL32UTF8
Posted
技术标签:
【中文标题】Oracle:从 WE8ISO8859P1 转换为 AL32UTF8【英文标题】:Oracle: Conversion from WE8ISO8859P1 to AL32UTF8 【发布时间】:2017-07-02 22:53:51 【问题描述】:我正在尝试整合一些数据库,但我在使用 CHARACTER Sets 时遇到了一些问题。
我的数据库如下所示:
源数据库
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
NLS_CHARACTERSET WE8ISO8859P1
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_LENGTH_SEMANTICS BYTE
目标数据库
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
NLS_CHARACTERSET AL32UTF8
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_LENGTH_SEMANTICS BYTE
我导出了一个模式,但是当我导入新数据库时,我遇到了很多错误,例如:
ORA-02374: conversion error loading table owner.table_name
ORA-12899: value too large for column col_name (actual: 403, maximum: 400)
我已经运行了 csscan 实用程序。结果如下:
TABLE Convertible Truncation Lossy
------ ------------- ------------- ------------
1 0 18 24
2 2,248 120 19,854
3 2,155 120 19,551
4 5,431 294 41,531
5 5,925 114 18,352
6 129 4 5,095
7 109 4 5,017
8 2,149 151 5,219
------ ------------- ------------- -------------
那么,有什么方法可以在导入前找出目的地中 VARCHAR2 的值?我可以改变表格的结构。在我们的示例中,我可以更改我的表并将列的大小从 400 修改为 403。
如果您需要更多信息或其他任何内容,请发表评论。
提前致谢!
【问题讨论】:
我的问题仍然没有解决方案。有任何想法吗?提前致谢! 【参考方案1】:csscan 工具会告诉您转换后 Truction 记录的大小,您可以使用它来更改字段的大小。在以下示例中,您需要将 SAMPLE_COLUMN 的大小从 VARCHAR(40) 更改为 VARCHAR(43) 以涵盖正在转换的所有内容:
csscan .err 示例输出:
User : SAMPLE_USER
Table : SAMPLE_TABLE
Column: SAMPLE_COLUMN
Type : VARCHAR2(40)
Number of Exceptions : 5
Max Post Conversion Data Size: 43
希望这会有所帮助。
【讨论】:
以上是关于Oracle:从 WE8ISO8859P1 转换为 AL32UTF8的主要内容,如果未能解决你的问题,请参考以下文章