从 Oracle 迁移 VARCHAR2 数据时的列长度

Posted

技术标签:

【中文标题】从 Oracle 迁移 VARCHAR2 数据时的列长度【英文标题】:Column length when migrate VARCHAR2 data from Oracle 【发布时间】:2015-07-17 11:13:28 【问题描述】:

如您所知,我们在 Oracle 中有两种类型的 VARCHAR2

e.g. COL1   VARCHAR2(20 BYTE)
     COL2   VARCHAR2(20 CHAR)

当我们将此数据迁移到另一个不同的数据库(例如 Netezza)时,正确的长度应该是多少。

COL1 should be 20

COL2 should be 20 OR 20X4= 80 ? 

因为 1 CHAR = 4 BYTES

谢谢

【问题讨论】:

在源数据库中检查这个。 select data_length, decode(char_used,'C','CHAR','B','BYTE') from user_tab_cols where table_name ='table' and column_name = 'column'; 这是我们应该转移的正确长度吗? 这是在表创建期间使用的长度。计算存储一个字符需要多少字节。对该表中的随机行执行并计算长度b(col)/length(col)。 【参考方案1】:

了解您的数据占用了多少字节。

 select max(lengthb(column)) from table

这将为您提供指定列中所有值的最大字节长度。所有字符都占用 4 个字节的可能性很小。

【讨论】:

其他点在 Netezza CHARACTER VARYING(n) n - 是字符而不是字节。所以如果在VARCHAR2(20 CHAR) www-304.ibm.com/support/knowledgecenter/SSULQD_7.1.0/…的情况下得到与Oracle相同的长度就不会有问题了

以上是关于从 Oracle 迁移 VARCHAR2 数据时的列长度的主要内容,如果未能解决你的问题,请参考以下文章

构建数据仓库时的varchar2 vs date

Oracle迁移到MySQL时数据类型转换问题

Oracle数据库中,使用case语句,遇到VARCHAR2与NVARCHAR2问题

Oracle SQL 在包含数据时将列类型从数字更改为 varchar2

oracle如果要修改字段长度值一定没东西吗

Oracle 19c对VARCHAR2的限制