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

Mic*_*Bui 10 mysql types

我正在优化数据库,并且有一些我不清楚固定长度数据类型的东西.

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

  • CHAR(N)
  • 日期
  • 时间
  • 约会时间
  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • INT
  • 浮动

这些是可变长度的:

  • 文本
  • VARCHAR
  • BLOB

如果我错了请纠正我!

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

  • TIMESTAMP
  • ENUM

谢谢.

bas*_*sh- 12

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

DATETIME/TIMESTAMP

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

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

NUMBERS

您可以通过设置长度来存储整数,int(20)但就存储而言,它没有差异,因此没有意义.

TINYINT SMALL INT MEDIUMINT BIGINT

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

FLOAT并且DOUBLE是近似计算,您不必指定精度.设置精度并插入超出规范的值,您的值将四舍五入到规范.再次看到官方文档.

VARCHAR

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

BLOB和TEXT

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

ENUM

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

编辑:

我在官方文档中找到了一个页面,它回答了您的所有问题数据类型存储要求