Mysql 为什么我们要分配大小(比如字符串数据类型中的char(20)或varchar(20),而不是SQL中的int或float之类的数据类型)?

Mysql 为什么我们要分配大小(比如字符串数据类型中的char(20)或varchar(20),而不是SQL中的int或float之类的数据类型)?,mysql,sql,oracle,Mysql,Sql,Oracle,在Oracle中,如果我没记错的话,int和float是数字(x,y)定义的某种快捷方式。数字类型被称为“固定大小”类型。无论存储在哪个值中,该列的存储大小都不会更改。通过选择类型,可以定义其大小。integer比bigint使用更少的空间 您还(隐式地)在列上定义一个约束,该约束限制可以存储的最大值和最小值(一个bigint可以容纳比一个整数更大的数字) 字符类型的长度规范也有类似的用途:它定义了数据最大长度的约束 对于char列,这也定义了存储大小,因为char也是固定长度的数据类型(较短的

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

数字类型被称为“固定大小”类型。无论存储在哪个值中,该列的存储大小都不会更改。通过选择类型,可以定义其大小。
integer
bigint
使用更少的空间

您还(隐式地)在列上定义一个约束,该约束限制可以存储的最大值和最小值(一个
bigint
可以容纳比一个
整数更大的数字)

字符类型的长度规范也有类似的用途:它定义了数据最大长度的约束

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

对于所有(?)现代DBMS来说,一个可变字符(
varchar
)列的定义(最大)大小实际上不会改变它的存储方式。DBMS只是确保存储的数据不能超过指定的值(类似于不能存储超过整数列定义范围的数字)


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

在某些RDBMS中,某些其他数据类型确实有一个大小选项。在Oracle中,它们没有,只是有不同的数据类型。就这么简单。例如,使用INT和BIGINT代替INT(4)、INT(8)等。还有FLOAT和DOUBLE,等等。主要是因为INT(5)在INT(8)上没有太多的支持点。所以,除了INT(n),你只得到INT(4)和INT(8),等等,但是它们被重命名为INT和BIGINT。与其他编程语言非常相似。因为字符串通常是可变长度的,而其他数据类型则不是。@Dems:至少在MySQL中,是显示宽度,而不是存储大小。
[n]char
列的最大大小肯定会改变它在SQL Server中的存储方式,除非使用压缩。您是否打算仅适用于
[n]varchar
?@MartinSmith:true。谢谢你的提示。