-- TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 分别使用 8, 16, 24, 32, 64 位存储空间,一般情况下越小的列越好;
-- 1.FLOAT 和 DOUBLE 为浮点类型,DECIMAL 为高精度小数类型。CPU 原生支持浮点运算,但是不支持 DECIMAl 类型的计算,因此 DECIMAL 的计算比浮点类型需要更高的代价;
-- 2.FLOAT、DOUBLE 和 DECIMAL 都可以指定列宽,例如 DECIMAL(18, 9) 表示总共 18 位,取 9 位存储小数部分,剩下 9 位存储整数部分;
-- 1.CHAR 和 VARCHAR 两种类型,一种是定长的,一种是变长的
-- 2.VARCHAR 这种变长类型能够节省空间,因为只需要存储必要的内容。但是在执行 UPDATE 时可能会使行变得比原来长,当超出一个页所能容纳的大小时,就要执行额外的操作。MyISAM 会将行拆成不同的片段存储,而 InnoDB 则需要分裂页来使行放进页内。
-- 3.VARCHAR 会保留字符串末尾的空格,而 CHAR 会删除;
MysQL支持多种字符串类型,包括VARCHAR和CHAR类型、BLOB和TEXT类型、ENUM(枚举)和SET类型;
VARCHAR和 CHAR是两种最主要的字符串类型。
VARCHAR
1.VARCHAR类型用于存储可变长字符串,是最常见的字符串数据类型。它比定长类型更节省空间,因为它仅使用必要的空间
CHAR与VARCHAR如何选择?
1.字符串列的最大长度比平均长度大很多,列的更新很少;使用了像UTF-8这样复杂的字符集,每个字符都使用不同的字节数进行存储。
2.CHAR适合存储很短的字符串,或者所有值定长或都接近同一个长度
MySQL 提供了两种相似的日期时间类型: DATETIME 和 TIMESTAMP
DATETIME
--1.能够保存从 1001 年到 9999 年的日期和时间,精度为秒,使用 8 字节的存储空间;
--2.它与时区无关
--3.默认情况下,MySQL 以一种可排序的、无歧义的格式显示 DATETIME 值,例如“2008-01-16 22:37:08”,这是 ANSI 标准定义的日期和时间表示方法。
TIMESTAMP
--1.和 UNIX 时间戳相同,保存从 1970 年 1 月 1 日午夜(格林威治时间)以来的秒数,使用 4 个字节,只能表示从 1970 年 到 2038 年
--2.它和时区有关,也就是说一个时间戳在不同的时区所代表的具体时间是不同的.
--3.MySQL 提供了 FROM_UNIXTIME() 函数把 UNIX 时间戳转换为日期,并提供了 UNIX_TIMESTAMP() 函数把日期转换为 UNIX 时间戳;
--4.默认情况下,如果插入时没有指定 TIMESTAMP 列的值,会将这个值设置为当前时间
--5.应该尽量使用 TIMESTAMP,因为它比 DATETIME 空间效率更高
--1.BLOB和TEXT都是为存储很大的数据而设计的数据类型,分别采用二进制和字符方式存储
--2.与其他类型不同,MySQL把每个BLOB和TEXT值当做一个独立的对象去处理。当BLOB和TEXT值太大时,InnoDB会使用专门的“外部”存储区域来进行存储,此时每个值在行内需要1~4个字节存储一个指针,然后在外部存储区域存储实际的值。
--3.MySQL对BLOB和TEXT列进行排序与其他类型是不同的:它只对每个列的最前max_sort_length个字节而不是整个字符串做排序。同样的,MySQL也不能将BLOB或TEXT列全部长度的字符串进行索引;