MySQL(二)-数据类型

141 阅读5分钟

写在前面:部分内容摘抄于冰河的MySQL运维大全

一.数值类型

1.1 整数类型

1.1.1整数类型所需的存储空间

img

1.1.2整数类型的数值范围

img

备注:1.整数类型的显示宽度与数据类型的取值范围无关,显示宽度只是指定最大显示的数字个数。如果插入的数据大于显示宽度,但没有超过整数类型的取值范围,依然可以正确插入,并正确显示

2.显示宽度可以配合ZEROFILL使用,ZEROFILL在数字显示位数不够时,用0进行填充

1.2 浮点数类型

1.2.1浮点数占用空间

1.2.2浮点数取值范围

img

备注:1.浮点数可以使用(M,D)的方式进行表示,(M,D)表示当前数的整数位和小数位一共显示M位数字,其中,小数点后会显示D位数字,M被称为精度,D被称为标度

2.如果插入的数字超出浮点数的精度范围,会被四舍五入

1.3 定点数类型

DECIMAL:DECIMAL也可以使用(M,D)进行表示,M被称为精度,是数据的总位数;D被称为标度,表示数据的小数位所占的位数。定点数在MySQL内部是以字符串的形式进行存储的,它的精度比浮点数更加精确,适合存储表示金额

二.日期和时间类型

日期和时间类型占用的存储空间

img

日期和时间类型表示的范围

每种日期和时间类型都有一个有效值范围,如果超出范围,则会以0进行存储,以下是零值表示

2.1 YEAR类型

在MySQL中,YEAR有以下几种存储格式:

4位字符串,格式为YYYY,最小值为1901,最大值为2155

2位字符串,最小值为00,最大值为99。其中,当取值为00到69时,表示2000到2069;当取值为70到99时,表示1970到1999。如果插入的数据超出了取值范围,则MySQL会将值自动转换为2000

2.2 TIME类型

TIME类型用来表示时间,不包含日期部分。

在MySQL插入TIME类型的数据,有几种不同的格式

(1)带有冒号的字符串,比如D HH:MM:SS、HH:MM:SS、HH:MM、D HH:MM、D HH或SS格式,D表示天,取值范围0-34。如果使用带有D格式的字符串插入TIME类型的字段,D会被转化为小时,计算格式为D*24+HH

(2)不带有冒号的字符串或者数字,格式为"HHMMSS"或者HHMMSS,如果插入不合法,存储数据时会将其自动转化为00:00:00进行存储

(3)使用CURRENT_TIME或者NOW(),插入当前系统的时间

2.3 DATE类型

DATE类型表示日期,没有时间部分,格式为YYYY--MM-DD,其中YYYY表示年份,MM表示月份,DD表示日期,在向DATE类型的字段插入数据时,需要满足一定的格式条件

以YYYY-MM-DD或者YYYYMMDD格式表示的字符串日期,最小取值为1000-01-01,最大取值为9999-12-03

以YY-MM-DD或者YYMMDD格式表示的字符串日期,年份部分跟YEAR类型一致:当年份取值为00到69时,会被转化为2000到2069;当年份取值为70-99时,会被转化为1970到1999

2.4 DATETIME类型

所有日期时间类型中占用存储空间最大,需要8个字节

格式:以YYYY-MM-DD HH:MM:SS格式或者YYYYMMDDHHMMSS格式的字符串插入DATETIME类型的字段时,最小值为1000-01-01 00:00:00,最大值为9999-12-03 23:59:59

以YY-MM-DD HH:MM:SS格式或者YYMMDDHHMMSS格式的字符串插入DATETIME类型的字段时,年份符合YEAR类型的规则,不再赘述

2.5 TIMESTAMP类型

存储范围:"1970-01-01 00:00:00 UTC" 到 "2038-01-19 03:14:07 UTC"。其中,UTC表示世界统一时间;TIMESTAMP在存储的时候是根据世界统一时间存储的,存储数据得时候需要对当前时间所在的时区进行转换,查询的时候要将时间转换回当前的时区。因此,使用TIMESTAMP存储的同一个时间值,在不同时区查询时会显示不同的时间

三.文本字符串类型

文本字符串类型所占存储空间

3.1 CHAR与VARCHAR类型

CHAR插入时如果实际长度比声明长度小,则在右侧进行填充,CHAR类型进行检索时,会去掉尾部空格

VARCHAR是可变长的字符串,进行检索时,不会去掉尾部空格

3.2 TEXT类型

在MySQL中,Text用来保存文件类型的字符串,一共四种类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,TEXT类型的字段保存和查询数据时,不会删除尾部的空格

3.3 ENUM类型

ENUM类型的取值范围需要定义字段时进行指定

3.4 SET类型

SET表示一个字符串对象,可以包含0~64个成员,根据成员个数的不同,所占用存储空间也是不同的。以下为SET类型所占空间

注意:SET类型在选取成员时,可以选择多个成员,这点与ENUM不同,会去掉重复的成员

3.5 JSON类型

MySQL 5.7开始支持JSON类型,MySQL 8.x版本中,JSON类型提供了进行自动验证的JSON文档和优化的存储结构。当要检索JSON类型的字段中某个数据的具体值,可以使用"->"和"->>"符号

如:mysql> SELECT j->'.nameASname,j>.name' AS name, j->'.address.province' AS province, j->'$.address.city' AS city FROM t19; +----------+-----------+-----------+ | name | province | city | +----------+-----------+-----------+ | "binghe" | "sichuan " | "chengdu" | +----------+-----------+-----------+ 1 row in set (0.01 sec)

四.二进制字符串类型

二进制字符串类型占用空间