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() 的同义词⽤于获取当

前⽇期和时间

相关推荐
洛克大航海9 小时前
解锁 PySpark SQL 的强大功能:有关 App Store 数据的端到端教程
linux·数据库·sql·pyspark sql
XueminXu11 小时前
ClickHouse数据库的表引擎
数据库·clickhouse·log·表引擎·mergetree·special·integrations
冒泡的肥皂11 小时前
MVCC初学demo(二
数据库·后端·mysql
代码程序猿RIP11 小时前
【Redis 】Redis 详解以及安装教程
数据库·etcd
小生凡一11 小时前
redis 大key、热key优化技巧|空间存储优化|调优技巧(一)
数据库·redis·缓存
oe101911 小时前
好文与笔记分享 A Survey of Context Engineering for Large Language Models(上)
数据库·笔记·语言模型·agent·上下文工程
小马哥编程11 小时前
【软考架构】案例分析-对比MySQL查询缓存与Memcached
java·数据库·mysql·缓存·架构·memcached
一 乐11 小时前
高校后勤报修系统|物业管理|基于SprinBoot+vue的高校后勤报修系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·毕设
折翼的恶魔12 小时前
SQL190 0级用户高难度试卷的平均用时和平均得分
java·数据库
煎蛋学姐12 小时前
SSM基于框架在线电影评论投票系统3gr0f(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·系统开发·ssm 框架·在线电影评论投票系统