在MySQL 中有两种数值类型,整型和实数(即带有小数的数字)。整型可以通过 TINYINT、SMALLINT、MEDIUMINT、INT 或 BIGINT 表示,分别对应8bit、16bit、24bit、32bit 和64bit 的存储空间。实数可以通过 FLOAT、DOUBLE 和 DECIMAL 表示,其中 FLOAT 和 DOUBLE 即通常所说的浮点数,由于计算机二进制存储的精度问题,其计算得到的是近似的结果。
整型字段类型设计
整型可以选择是否是无符号数,这样可以禁止使用负数,并且可以将存储的最大值翻倍,例如 TINYINT UNSIGNED类型的字段可以存储的值的范围是0-255,而不是有符号的-128-127。使用无符号还是有符号取决与字段类型的范围,但是如果确定字段是无符号的,那么优先选择无符号类型,因为最大值翻倍可以在一定程度上避免使用更大存储空间的整型类型。
MySQL 允许我们指定整型的宽度,例如 INT(11)。这对于大部分应用并没有太大意义——实际上 MySQL 并不会限制合法值的范围,也就是即便指定为 INT(11),实际上只要数值类型的存储空间足够,也可以存储超过设定宽度的整型,例如 INT(12)的数字也可能可以存储到 INT(11)类型的字段中。对于存储和计算而言,INT(1)和 INT(20)是等效的。
如果确实要考虑性能,应该是根据业务真实的数值范围来确定使用整型字段类型,原则是只要字段类型不会超过业务系统的数值最大值,那么尽可能地选择低存储长度的整型类型。如果是无符号的数值,那就尽量使用无符号属性。例如,假设使用整型替代枚举的话,如果枚举数量不超过255个&#