在SQL中增加列大小的潜在风险是什么?

时间:2014-02-27 19:35:21

标签: mysql sqldatatypes

假设我在一个名为ShortDescription的表中有一个名为Ticket的列。

ShortDescription varchar (16) NOT NULL

现在,假设我增加了这样的大小 -

alter table Ticket modify ShortDescription varchar (32) NOT NULL;

这样做的潜在风险是什么?一个潜在的风险是,如果某些其他应用程序根据之前的ShortDescription大小将其任何字段静态设置为16,那么这些应用程序可能无法正常使用更大的数据。

1 个答案:

答案 0 :(得分:3)

SQL是一种查询语言,而不是特定的数据库实现,因此您的里程可能会有所不同,但是......

假设'SQL'意味着数据库网站上的MySQL数据库你没有什么可担心的存储和性能以外的事实如果你存储一堆32字节的蜇,你将使用更多的内存和磁盘使用它们,但是如果你实际存储的是16字节字符,转换为VARCHAR(32)就是一个清洗。

在MySQL中,VARCHAR没有影响(假设你保持NOT NULL)。如果在复合主键中使用该列,则可能会达到大小限制,但是否则所有varchar条目仅占用数据大小+ 1个字节来存储。

如果在某个其他表中将该列引用为foriegn键,则还需要将该列增长到VARCHAR(32),否则如果尝试以32个字符串阻塞,则可能会截断额外的16个字符成16个字符的列。

如果不是MySQL,数据库技术的实现可能会有所不同。但是,VARCHAR实现往往是相似的,仅使用存储数据的大小,然后使用恒定量来表示数据结束。因此,为什么通常在许多数据库系统中都有静态CHAR和动态VARCHAR类型的选项。

正如您在帖子中所述,必须考虑依赖于静态数据大小的外部系统。

  

注意:请原谅上述快速免费的条款交换byte   和character,我假设是UTF8或ASCII。如果你正在使用一些   多字节编码,适当替代。