mysql的数据类型详解
#################################
如何选择合适的数据类型?
- 合适的数据类型。
- 更小的数据类型。
- 尽可能用数字类型替换字符类型。
分类标准:
分类:
数值数据类型:()
字符串数据类型
日期时间数据类型
json数据类型
空间数据类型
数值数据类型:
整数(精确值):
1)tinyint,占用1字节,用在很少值的分类列中,比如状态列的数据类型 2)smallint,占用2字节。 3)mediumint,占用3字节,一般不用。 4)int(integer),通常作为主键列的数据类型,占用4字节 5)bigint,通常作为主键列的数据类型,占用8字节
定点(精确值):
与 float 和 double 不同, decimal 在创建时需要指定两个描述精度的数字, 分别是 precision 和 scale: 1)precision 指整个 decimal 包括整数和小数部分一共有多少个数字, 2)scale 指 decimal 的小数部分包含多少个数字, 例如:123.45 就是一个 precision=5, scale=2 的 decimal. 我们可以在建表时按照这种方式定义我们想要的 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。
#####################################
##############################
igoodful@qq.com