MySQL数据类型及其优化(3)

196 阅读2分钟

这是我参与8月更文挑战的第24天,活动详情查看:8月更文挑战

猫和老鼠.jpg

前言:   本篇文章 是我关于MySQL的第24篇文章,水平一般、能力有限。文章写的比较浅,适合新手来看。本篇文章介绍MySQL数据类型及其优化。

时间和时期类型

select * from food where id =1;
Name        |Value              |
------------+-------------------+
id          |1                  |
name        |拉面                 |
type        |                   |
create_time |2021-08-24         | DATE
update_time |2021-08-24 23:52:52| DATETIME
success_time|2021-08-24 23:54:45| TIMESTAMP

DATE

只能存储年月日,并且范围开始是1001年,结束是9999年。

DATETIME:

格式为日期+时间 YYYYMMDDHHMMSS整数 并且范围开始是1001年,结束是9999年。精度为秒,使用8个字节存储。 因为内部使用整数存储,所以它是一种可排序的类型,显示时以ANSI标准定义的日期和时间表示方法显示。

TIMESTAMP:

格式是日期+时间的时间戳。使用4个字节来存储,依赖于时区。也就是说不同的时区,时间戳是不同的。 它的开始是从1970年1月1日0点开始的秒数,因为它是用4个字节来存储。且不用像DataTime需要转化。一般设计表时可以优先使用时间戳格式。不要试图用int或者tinyint来存储时间戳,这样没有任何作用。本身的存储格式已经是最优解了。

位数据类型

MySQL有少数几种存储类型使用紧凑的位存储数据。不管底层存储格式如何处理,从技术上说都是字符型。

BIT:

用于存储二进制的值,0101这种。 BIT(1)只能存储一位 0/1 ,BIT(2) 可以存储两位二进制。依次类推。最多可以存储64位,其范围就是1-64。 虽然其存储的是二进制数字,但是在MySQL中只是把它当成字符串来处理。因为它并不是ASCII码的0/1,所以也不能对其进行运算。其一般在应用中也是基本上用不到的。

注意: 在查询位数据时,直接select 字段 并不行。需要用到hex()函数,或者bin()函数进行转换。