2017-07-26 17 views
0

在oracle数据库和新bi在这里工作。想知道是否可以扩展长度为12到64或更长的可变字符(保存更长的字符串),我可能会看到什么样的问题? 我有一些程序和文件取决于这个领域。这是更一般的问题。定义为可变字符的字段是因为在将来扩展长度? THanks可变字符字段

回答

0

这很可能且非常简单,并且没有问题需要担心(至少只要您在Oracle中工作;稍后会详细介绍一下)。它的工作原理如下:

create table tbl (x varchar2(10)); 
insert into tbl values ('mathguy') 
alter table tbl modify (x varchar2(20)); 

您可能遇到的问题与其他语言(如Java)中的应用程序有关。如果您必须将Oracle表中的数据加载到Java应用程序(比如说),那么为表中的值保留的内存将根据声明的字符串长度进行分配,而不是其实际大小。所以如果你从长度10改为4000,那么对于来自表的值分配的内存大约多40倍,无论这是否真的需要。这可能是也可能不是问题,这取决于你的应用程序是如何内存不足的(以及同一台机器上发生了什么)。

+0

谢谢,将字段声明为变量字符的原因是什么。在这种情况下,它被定义为12,我们将其定义为变量,以便在将来需要时扩展? – jac

+0

是的,有java程序使用这个字段 – jac

+0

“变量字符”表示可变长度,但是如果你定义'varchar2(12)'这意味着12的上界(字节或字符,取决于你如何定义以及默认值) 。在Oracle的内部,无论是在磁盘上还是在内存中,长度都是字符串的实际长度,因此将所有内容定义为'varchar2(4000)'并不会造成什么影响。但是,如果将数据从Oracle批量加载到Java应用程序和内存可能是一个问题,那么您必须意识到这一点,而不是对列定义过于慷慨。 – mathguy

0

varchar的用途与准备在未来扩展列大小无关。但是,改变表格以增加字段长度应该没问题。

varchar2数据类型用于可以包含可变长度字符串的字段 - 字段的大小是可以存储的最大字符数。只要你的字符串永远不超过字段长度,你应该没问题,并且与使用直接字符字符相比,可以节省一些空间。

如果您需要扩展字段定义以适应更长的字符串,则可以使用ALTER TABLE ... MODIFY ...语法。请注意,如果表中已经有大量的数据,这可能是一个代价高昂的操作。

ALTER TABLE 
    customer 
MODIFY 
    ( 
    cust_name varchar2(100) 
    ); 

请参阅Oracle Documentation of VARCHAR2 Here

+0

会延长现有字段的长度或添加所需长度的新字段会更昂贵吗? – jac

+0

如果您需要保留现有数据,那么在添加新列后,您需要更新所有行以获得适当的值,这可能比就地修改列更昂贵。通常,为了防止混淆,只需修改原始列即可。 –