为什么我们在字符串数据类型中分配大小(如char(20)或varchar(20)而不在SQL中为int或float等数据类型分配)?

时间:2012-11-18 08:57:23

标签: mysql sql oracle

为什么我们在字符串数据类型中分配大小(如char(20)或varchar(20)而不在SQL中为int或float等数据类型分配)?

2 个答案:

答案 0 :(得分:2)

数字类型是所谓的“固定大小”类型。无论您存储哪个值,该列的存储大小都不会更改。通过选择类型,您可以定义它的大小。 integer占用的空间少于bigint

您还(隐含地)在列上定义了一个限制可以存储的最大值和最小值的约束(bigint可以包含比integer更大的数字。

字符类型的长度规范具有类似的用途:它定义了数据最大长度应该是什么的约束。

对于char列,这也定义了存储大小,因为char也是固定长度的数据类型(较短的值填充到定义的长度)

对于所有(?)现代DBMS,变化字符(varchar)列的已定义(最大)大小并未真正改变其存储方式。 DBMS只是确保您不能存储超过您指定的数量(类似于您不能存储超过整数列的定义范围的数字的事实)。

DBMS 可能应用一些内部(未记录的)优化,具体取决于定义的最大大小,但对于访问数据的系统来说,这不是“可见的”。

答案 1 :(得分:0)

在Oracle中,如果我没记错的话,int和float是数字(x,y)定义的某种快捷方式。