假设我在一个名为ShortDescription
的表中有一个名为Ticket
的列。
ShortDescription varchar (16) NOT NULL
现在,假设我增加了这样的大小 -
alter table Ticket modify ShortDescription varchar (32) NOT NULL;
这样做的潜在风险是什么?一个潜在的风险是,如果某些其他应用程序根据之前的ShortDescription大小将其任何字段静态设置为16,那么这些应用程序可能无法正常使用更大的数据。
答案 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。如果你正在使用一些 多字节编码,适当替代。