从 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 个字节的可能性很小。
【讨论】:
其他点在 NetezzaCHARACTER VARYING(n)
n - 是字符而不是字节。所以如果在VARCHAR2(20 CHAR)
www-304.ibm.com/support/knowledgecenter/SSULQD_7.1.0/…的情况下得到与Oracle相同的长度就不会有问题了以上是关于从 Oracle 迁移 VARCHAR2 数据时的列长度的主要内容,如果未能解决你的问题,请参考以下文章
Oracle数据库中,使用case语句,遇到VARCHAR2与NVARCHAR2问题