mysql的数据类型详解

#################################

如何选择合适的数据类型?

  1. 合适的数据类型。
  2. 更小的数据类型。
  3. 尽可能用数字类型替换字符类型。

 

 

分类标准:

分类:

数值数据类型:()

字符串数据类型

日期时间数据类型

json数据类型

空间数据类型

 

数值数据类型:

 

 

整数(精确值):

1tinyint,占用1字节,用在很少值的分类列中,比如状态列的数据类型

2smallint,占用2字节。

3)mediumint,占用3字节,一般不用。

4intinteger),通常作为主键列的数据类型,占用4字节

5bigint,通常作为主键列的数据类型,占用8字节

 

 

 

定点(精确值):

 

 

floatdouble 不同, decimal 在创建时需要指定两个描述精度的数字, 分别是 precision 和 scale:

1)precision 指整个 decimal 包括整数和小数部分一共有多少个数字,

2)scale 指 decimal 的小数部分包含多少个数字, 

例如:123.45 就是一个 precision=5, scale=2decimal. 我们可以在建表时按照这种方式定义我们想要的 decimal.

 

 

decimal(numeric):适用于需要精确数值的场合,比如钱,货币这些字段

比如字段:money decimal(5,2),

在本例中,5是精度, 2是比例。精度表示为值存储的有效位数,小数位数表示可以存储在小数点后的位数。

标准 SQL 要求decimal(5,2)能够存储具有五位数字和两位小数的任何值,因此可以存储在money列范围内的值从-999.99到 999.99.

的默认值为10。 decimal(M)decimal(M,0) decimal 如果DECIMAL小数位数为 0,则值不包含小数点或小数部分。

的最大位数为DECIMAL65,但给定DECIMAL 列的实际范围可能受给定列的精度或小数位数限制。如果为此类列分配的值的小数点后位数超过指定比例所允许的位数,则该值将转换为该比例。(确切的行为是特定于操作系统的,但通常效果是截断到允许的位数。)

 

 

 

浮点(近似值):

 

 

 

 

位值:

 

 

 

 时间类型

 

 

注意:不要用2位数表示年份信息以避免产生歧义,请使用4位数。

 

自动初始化和更新TIMESTAMP和DATETIME字段类型列

  • 设置自动初始化为当前时间:DEFAULT CURRENT_TIMESTAMP 插入行时对于没有为列指定值的,将自动初始化该列为当前时间戳。
  • 设置自动更新当前时间:ON UPDATE CURRENT_TIMESTAMP 当行中任何其他列的值从当前值更改时,自动更新列将自动更新为当前时间戳。如果所有其他列都设置为其当前值,则自动更新的列保持不变。

 

自动初始化和更新TIMESTAMP和DATETIME字段类型列 #设置默认值具有当前时间戳,并自动更新为当前时间戳建表举例:

 

create table test1 (
  `ts` timestamp default current_timestamp on update current_timestamp,
  `dt` datetime(6) default current_timestamp(6) on update current_timestamp(6),

 

 

非二进制字符串类型

 

下面的varchar字段最大需要多大空间存储(utf8mb4字符编码)?

varchar(80)?

  • utf8mb4字符编码每个字符最大占用4 Bytes存储空间。
  • 80 * 4=320 Bytes才能存储下最大80个utf8mb4字符。
  • 根据上边说明varchar如果超过255 Bytes存储空间,需要额外两个字节存储长度信息。所以总共需要322 Bytes。

 

 

 

 #####################################

 

##############################

posted @ 2021-07-22 16:04  igoodful  阅读(260)  评论(0编辑  收藏  举报