MySQL——数据类型

目录

[一: 本节⽬标](#一: 本节⽬标)

二:常⽤数据类型分类

三:数据值类型

四:字符串类型

[4.1 类型列表](#4.1 类型列表)

[4.2 关于排序](#4.2 关于排序)

[4.3 CHAR与VARCHAR的区别](#4.3 CHAR与VARCHAR的区别)

[4.4 如何选择CHAR与VARCHAR](#4.4 如何选择CHAR与VARCHAR)

五:日期类型

[5.1 类型列表](#5.1 类型列表)

[5.2 Mysql内置函数](#5.2 Mysql内置函数)


一: 本节⽬标

掌握数据类型分类

掌握常⽤数据类型

二:常⽤数据类型分类

在⾯向对象软件开发的过程中,通常会先进⾏需求分析从⽽得到类和属性,类是⾯向对象中的概念,对应到数据库中的概念就是实体,类中的属性对应实体中的属性。实体通常以表的形式存在,每个实体对应⼀张表,表中的每条记录(数据⾏)就是实体的⼀个实例,每条记录⼜包含若⼲字段(或称为列),每个字段代表实体的⼀个属性。如果要定义实体的属性,就要为属性命名并指定合适的数据类型。与其他编程语⾔类似,SQL中规定了⽤于描述属性的数据类型。常⽤的数据类型有以下⼏类:

数据值类型

字符串类型

⼆进制类型(对应到java中的byte数据)

⽇期类型

三:数据值类型

decimal是如何保证数据的精度不被丢失:

把一个数,进行拆分,整型部分可以使用int类型去表示,小数部分也可以使用int来表示,int表示21亿 然后用999999999表示它的限度就不会丢失,然后每9个数一分割,如果有剩余部分,则用一个最小的数据类。

建议:如果我们的数值int类型装不下 那就升级变成bigint,要有符号 不能换为无符号:

四:字符串类型

4.1 类型列表

CHAR(M)
**固定(**是固定的 比如你设了10 但是存了3个,就会给你打印3个,其余空格删除)⻓度字符串, M 表⽰⻓度,以字符为单位,取值范围 0 ~ 255 , M 省略则⻓度为 1

VARCHAR(M)(最常用的字符串类型)
可变⻓度字符串, M 表⽰字符最⼤⻓度,的范围 0 ~ 65535 ,有效字符个数取
决于实际字符数和使⽤的字符集。当使用utfmb4字符集 最多可以存16383个字符(65335/4)

TINYTEXT

⼩⽂本类型,最⼤⻓度为 255 (2^8 - 1)个字符,有效字符个数取决于使⽤的字符

TEXT(M)(超出范围会自动提升)

⽂本类型,最⼤⻓度为 65535 (2^16 - 1)个字符,有效字符个数取决于使⽤的字符

MEDIUMTEXT

中⽂本类型,最⼤⻓度为 16,777,215 (2^24 - 1)个字符,有效字符个数取决于使

⽤的字符集

LONGTEXT

⼤⽂本类型,最⼤⻓度为 4,294,967,295 即 4GB (2^32 - 1)个字符,有效字符

个数取决于使⽤的字符集

BINARY(M)

固定⻓度⼆进制字节,于CHAR类似,但存储的是⼆进制字节⽽不是字符串。 M 表

⽰⻓度,以字节为单位,取值范围 0 ~ 255 , M 省略则⻓度为 1

VARBINARY(M)

可变⻓度⼆进制字节,于VARCHAR类似,但存储的是⼆进制字节⽽不是字符串。

M 表⽰⻓度,以字节为单位

TINYBLOB

⼩⼆进制字节类型,最⼤⻓度为 255 (2^8 - 1)个字节

BLOB(M)

⼆进制字节类型,最⼤⻓度为 65535 (2^16 - 1)个字节

MEDIUMBLOB

中⼆进制字节类型,最⼤⻓度为 16,777,215 (2^24 - 1)个字节

LONGBLOB

⼤⼆进制字节类型,最⼤⻓度为 4,294,967,295 即 4GB (2^8 - 1)个字节

ENUM('value1','value2',...)枚举

从值列表 'value1','value2' 或 ''(空字符串) 和 NULL 中选⼀个值最多可以有 65,535 个不同的元素

单个元素的最⼤⻓度是 M <= 255 或 (M x w) <= 1020 ,其中 M 是元素字符⻓度, w 是字符集中字符所需的最⼤字节数ENUM的值在内部表⽰为整数

SET('value1','value2',...)集合

从值列表 'value1','value2' 中选零个或多个值

最多64个元素

单个元素的最⼤⻓度是 M <= 255 或 (M x w) <= 1020 ,其中 M 是元素字

符⻓度, w 是字符集中字符所需的最⼤字节数

SET值在内部表⽰为整数

4.2 关于排序

字符串类型的列以字符为单位,并且可以单独指定字符集和排序规则,⽐如字符集是 utf8mb4 ,

排序规则是 utf8_0900_ai_ci

⼆进制的列以字节为单位,可以指定_bin结尾的排序规则,⽐如排序规则是 utf8mb4_bin ,这时以⽐较和排序基于数字字符代码值

4.3 CHAR与VARCHAR的区别

CHAR 固定⻓度的字符串, M 表⽰以字符为单位的列⻓度,取值范围 0 ~ 255 ,省略则⻓度为1 ,在存储时总是⽤空格向右填充到指定的⻓度,获取列的值时会从尾部删除空格。允许定义CHAR(0),此时列的值只能为NULL或空字符串,主要的⽬的是为了旧系兼容,⽐如类中必须有这个属性,但不使⽤这个属性的值,也就是说值并没有意义,但列⼜不能没有。

VARCHAR 可变⻓度字符串。 M 表⽰以字符为单位的最⼤列⻓度,取值范围 0 ~ 65,535 (在所有列中共享),有效⻓度取决于实际字符数和使⽤的字符集,并且⽤额外的⼀或两个字节记录实际使⽤的字节数,当实际字节数不超过 255 个字节⽤⼀个字节记录⻓度,超过 255 个字节时,使**⽤两个字节记录⻓度,获取列的值时不会从尾部删除空格,插⼊数据时会删除超出⻓度的空格。**

sql 复制代码
mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.01 sec)
-- 创建了一个vc表,并且定义了两个变量类型
mysql> INSERT INTO vc VALUES ('ab     ', 'ab     ');
Query OK, 1 row affected (0.00 sec)
//插入变量值
mysql> SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc;
+---------------------+---------------------+
| CONCAT('(', v, ')') | CONCAT('(', c, ')') |
+---------------------+---------------------+
| (ab   ) | (ab) |
+---------------------+---------------------+
1 row in set (0.06 sec)
//打印出来 第一个空格也打印
第二个就没有空格省略了
mysql> insert into vc values ('ab ', 'ab ');
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> show warnings;
+-------+------+----------------------------------------+
| Level | Code | Message |
+-------+------+----------------------------------------+
| Note | 1265 | Data truncated for column 'v' at row 1 |
+-------+------+----------------------------------------+
1 row in set (0.00 sec)

4.4 如何选择CHAR与VARCHAR

如果数据确定⻓度都⼀样,就使⽤定⻓ CHAR 类型,⽐如:⾝份证,md5,学号,邮编。

如果数据⻓度有变化,就使⽤变⻓ VARCHAR , ⽐如:名字,地址,但要规划好⻓度,保证最⻓的字符串能存的进去。

定⻓ CHAR 类型⽐较浪费磁盘空间,但是效率⾼。

变⻓ VARCHAR 类型⽐较节省磁盘空间,但是效率低。

定⻓ CHAR 类型会直接开辟好对应的存储空间。

变⻓ VARCHAR 类型在不超过定义⻓度范围的情况下⽤多少开辟多少存储空间

五:日期类型

5.1 类型列表

TIMESTAMP(fsp)(不使用时间太短)

4bytes

时间戳类型

⽀持范围 1970-01-01 00:00:01.000000 ~ 2038-01-19

03:14:07.499999

0值为 0000-00-00 00:00:00

DATETIME(fsp)(常用)

8bytes

⽇期类型和时间类型的组合

⽀持范围 1000-01-01 00:00:00.000000 ~ 9999-12-31

23:59:59.499999

显⽰格式为 YYYY-MM-DD hh:mm:ss.fraction

0值为 0000-00-00 00:00:00

DATE

3bytes

⽇期类型

⽀持范围 1000-01-01 ~ 9999-12-31

显⽰格式为 YYYY-MM-DD

0值为 0000-00-00

TIME(fsp)

3bytes

时间类型

⽀持范围 -838:59:59.000000 ~ 838:59:59.000000

显⽰格式为 hh:mm:ss.fraction

0值为 00:00:00

YEAR(4)

1bytes

4位格式的年份

⽀持范围 1901 ~ 2155

显⽰格式为 YYYY

0值为 0

Y年M月D日 h小时 m分钟s秒

5.2 Mysql内置函数

fsp 为可选设置,⽤来指定⼩数秒精度,范围从0到6,值为0表⽰没有⼩数部分,如果省略,默认精度为0
URRENT_DATE 和 CURRENT_DATE() 是 CURDATE() 的同义词⽤于获取当前⽇期

CURRENT_TIME 和 CURRENT_TIME(fsp) 是 CURTIME() 的同义词⽤于获取当前时间

CURRENT_TIMESTAMP 和 CURRENT_TIMESTAMP(fsp) 是 NOW() 的同义词⽤于获取当

前⽇期和时间

相关推荐
Pocker_Spades_A6 分钟前
时序数据库选型指南:从大数据视角看Apache IoTDB的工业级优势
数据库
梦想平凡12 分钟前
情怀棋牌源代码焕新记录(一):全新国风UI与原版工程梳理
java·服务器·数据库·websocket·网络协议·cocos2d
cspttty14 分钟前
FP&A应届岗技能路线:Excel建模、SQL取数、BI看板与预算分析
大数据·数据库
微学AI32 分钟前
飞牛 NAS 部署 prompts.chat:自建提示词库、导入社区内容,再配置固定公网访问
数据库·内网穿透
羑悻的小杀马特34 分钟前
从写 YAML 到集群自愈:KES-Operator 把 KES 集群接进 Kubernetes 原生体系
运维·数据库·容器·kubernetes
bksczm38 分钟前
MySQL基础篇之事务
linux·数据库·sql·mysql
李白客39 分钟前
数据库管理工具怎么选?Navicat、DataGrip、DBeaver 六维横向对比与选型建议
运维·数据库
马立杰40 分钟前
mysql中Illegal mix of collations for operation “UNION”错误的解决方法
数据库·sql·网络安全
蓝速科技42 分钟前
蓝速 K10 三防平板在工业恶劣工况下的选型与应用指南
大数据·运维·数据库·人工智能·科技
bksczm44 分钟前
MySQL基础篇之视图与用户管理
linux·数据库·sql·mysql