MySQL固定长度和可变长度数据类型

时间:2011-07-25 12:19:24

标签: mysql types

我正在优化数据库,对于固定长度的数据类型,我有些不清楚。

据我所知,这些数据类型是固定长度

  • CHAR(n)的
  • DATE
  • TIME
  • DATETIME
  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • INT
  • FLOAT
  • DOUBLE

这些是可变长度

  • TEXT
  • VARCHAR
  • BLOB

如果我错了请纠正我!

现在,我的问题是:这些数据类型是固定长度还是可变长度?

  • 时间戳
  • ENUM

感谢。

1 个答案:

答案 0 :(得分:11)

您在某些数据类型上不正确。

<强> DATETIME / TIMESTAMP

TIMESTAMPDATETIME类似,但与DATETIME相比,TIMESTAMP只使用了一半的存储空间。但是使用TIMESTAMP有明显的缺点,所以你应该查看官方文档,看看你需要哪一个。但大多数DATETIME都是更好的选择。

您不必担心此数据类型的修复/变量长度

<强> NUMBERS

您可以通过设置长度(即int(20)来存储整数,但就存储而言,它没有区别,因此没有任何意义。

TINYINT SMALL INT MEDIUMINT BIGINT

这些数据类型分别需要8,16,24,32和64位存储空间。每个都有不同的最大值和最小值。如果您确定您的值不会超过某个数字,则应选择最小的int数据类型以节省空间并提高性能。有关这些数据的更多信息,请参阅官方文档。

FLOATDOUBLE是近似计算,您无需指定精度。设置精度并插入超出规范的值,您的值将四舍五入到规范。再次看到官方文档。

<强> VARCHAR

VARCHAR,正如您所期望的那样是可变长度,但请记住,当您只需要5个字符时,请不要指定类似VARCHAR(100)的内容,因为尽管存储在磁盘上时长度是可变的,它需要你使用RAM时指定的长度,所以你将浪费宝贵的记忆。

BLOB和TEXT

BLOBTEXT以特殊方式存储,具体取决于您使用的存储引擎。它们通常存储在“外部”区域中。除非字符串非常长,否则应避免使用此方法。此数据类型无法索引整个长度,也不受内存支持,因此系统内存不使用该数据类型。在调用它时,将使用MyISAM存储引擎在磁盘上创建临时表,这将导致性能大幅下降。

<强> ENUM

这非常紧凑,您可以在创建表时将特定值设置为字段。字符串是固定的,更改ENUM列需要ALTER TABLE,因此您不必担心此字符的修正/变量长度。

修改

我在官方文档中找到了一个页面,可以回答您的所有问题Data Type Storage Requirements