Skip to main content

数据类型

整数类型

整数(whole number):TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT。分别使用8,16,24,32,64位存储空间。它们可以存储的值的范围从−2^(N−1)到2^(N−1)−1,其中N是存储空间的位数。
整数类型有可选的UNSIGNED属性,表示不允许负值,这大致可以使正数的上限提高一倍。例如TINYINT UNSIGNED可以存储的范围是0~255,而TINYINT的存储范围是−128~127。

实数类型

实数是带有小数部分的数字。

  • float:使用4个字节存储
  • double:使用8个字节存储

字符串类型

VARCHAR(n)

  • n表示字符长度,和postgresql一样
  • 用于存储可变长字符串
  • 需要使用1或2个额外字节记录字符串的长度:如果列的最大长度小于或等于255字节,则只使用1个字节表示,否则使用2个字节
  • 在5.0或者更高版本,MySQL在存储和检索时会保留末尾空格
  • 与postgresql不同,MySQL需要合理设置n,n对存储、索引和内存管理产生一定的间接影响
  • 当我们用该字段进行排序操作的时候,Mysql会根据该字段的设计的长度进行内存预估, 如果设计过大的可变长度, 会导致内存预估的值超出sort_buffer_size的大小, 导致mysql采用磁盘临时文件排序,最终影响查询性能,链接
  • MySQL通常会分配固定大小的内存块来保存内部值。尤其是使用内存临时表进行排序或操作时会特别糟糕。在利用磁盘临时表进行排序时也同样糟糕。

CHAR(n)

  • 定长
  • CHAR适合存储很短的字符串,或者所有值都接近同一个长度

日期和时间类型

  • DATETIME
    • 从1001年到9999年,精度为秒,8个字节的存储空间
    • 不受时区影响,按存储的字面值返回
  • TIMESTAMP
    • 1970年到2038年,4个字节的存储空间
    • 受时区影响,存储的是UTC时间,会根据服务器、操作系统和客户端连接所配置的时区读写

BLOB和TEXT类型

BLOB和TEXT都是为存储很大的数据而设计的字符串数据类型,分别采用二进制和字符方式存储。