数据类型
整数类型
整数(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都是为存储很大的数据而设计的字符串数据类型,分别采用二进制和字符方式存储。