it编程 > 数据库 > Mysql

Mysql中的数据类型用法及解读

11人参与 2025-04-24 Mysql

1.1数据类型分类

mysql 数据类型可以分为三大类:

  1. 数值类型:包括整数类型、浮点类型、定点类型等。
  2. 字符串类型:包括 charvarchartext 等。
  3. 日期和时间类型:包括 datedatetimetimestamp 等。

1.2 数值类型

数值类型在 mysql 中主要有整型和小数型两种类型。

1.2.1 tinyint 类型

tinyint 类型是一个小的整数类型,通常用于存储小范围的整数。

范围

示例:

create table tt1 (num tinyint);
insert into tt1 values(1);   -- 成功插入
insert into tt1 values(128); -- 报错,超出范围

有符号正数:

有符号负数:

无符号数:

1.2.2 bit 类型

bit 类型用于存储位字段,可以存储二进制数据。

示例:

create table tt4 (id int, a bit(8));
insert into tt4 values(10, 10); -- 存入10,显示可能是位二进制值

(bit[(m)] : 位字段类型。m表示每个值的位数,范围从1到64。如果m被忽略,默认为1。)

注:bit字段在显示时,是按照ascii码对应的值显示

1.2.3 小数类型

1.2.3.1 float 类型

float 类型用于存储浮动的小数值,支持四舍五入。

示例:

create table tt6 (id int, salary float(4, 2));
insert into tt6 values(100, -99.99);  -- 成功插入
insert into tt6 values(101, -99.991); -- 会进行四舍五入,存储为 -99.99

案例:

小数:float(4,2)表示的范围是-99.99 ~ 99.99,mysql在保存值时会进行四舍五入。

如果是无符号数的float,其中的负数部分会被舍去。例如:

无符号小数:float(4,2)表示的范围是0 ~ 99.99,mysql在保存值时会进行四舍五入。

1.2.3.2 decimal 类型

decimal 类型是定点数,精度更高,适用于需要精确存储小数的情况。

示例:

create table tt7 (id int, salary decimal(5, 2));
insert into tt7 values(100, 99.99);  -- 成功插入

注: decimal类型和float类型很像,他们都支持四舍五入,他们的无符号类型都是舍去负数,但是decimal类型的精度比float类型更高。

例如:

1.3 字符串类型

1.3.1 char 类型

char 是固定长度的字符串类型,适用于存储长度固定的字符串数据。

示例:

create table tt9 (id int, name char(2));
insert into tt9 values(100, 'ab');    -- 成功插入
insert into tt9 values(101, '中国');  -- 成功插入

1.3.2 varchar 类型

varchar 是可变长度的字符串类型,适用于存储长度不固定的字符串数据。

示例:

create table tt10 (id int, name varchar(6));
insert into tt10 values(100, 'hello');           -- 成功插入
insert into tt10 values(100, '我爱你,中国');     -- 成功插入

请思考为什么会出现这种情况?

原因是:charvarchar 类型在 mysql 中存储的是字符而非字节。在默认的 utf8 字符集下,每个字符通常占用 3 个字节。

由于 varchar 是可变长度的字符串类型,它不仅存储字符本身,还需要额外的空间来记录实际数据的长度。因此,在 utf8 编码下,varchar 字段的最大字符数是 21844。

这个限制是因为 varchar 的最大字节数为 65535 字节,而每个字符占用 3 个字节,再加上存储长度的开销(最多 3 个字节),因此实际能存储的最大字符数为 65535 / 3 = 21845,减去存储长度所需的空间后,最终可以存储最多 21844 个字符。

1.3.3charvsvarchar

如何选择定长或变长字符串?

定长(char

如果数据的长度确定且不会变化,使用定长(char)类型更为合适。例如:身份证、手机号、md5 值等。

变长(varchar

如果数据的长度有变化,可以使用变长(varchar)类型。例如:名字、地址等数据。

优缺点对比:

定长(char

优点

缺点

变长(varchar

优点

缺点

1.4 日期和时间类型

常用的日期和时间类型:

1.5 enum 和 set 类型

1.5.1 enum 类型

enum 类型用于存储“单选”项。每个选项都有一个数字编号,对应存储在数据库中的实际值。

示例:

create table votes (username varchar(30), gender enum('男', '女'));
insert into votes values('张三', '男');

enum里面的值默认下表从0开始,0表示空null

1.5.2 set 类型

set 类型用于存储“多选”项,可以选择多个值,值的组合会以数字标识。

示例:

create table votes (username varchar(30), hobby set('登山', '游泳', '篮球', '武术'));
insert into votes values('雷锋', '登山,游泳');

爱好:爬山登月打球游泳睡觉
601100
510100

原因: set 类型中的值是按二进制位存储的,每个选项对应一个二进制位。每个选项的值会用一个数字表示,数字的每一位代表一个选项的状态(是否选中)。这样可以节省存储空间。

1.6 find_in_set函数

find_in_set(sub, str_list) 函数用于查找一个字符串是否在由逗号分隔的字符串列表中。

示例:

同时它可以让查找更方便

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

MySQL之表连接方式(内连接与外连接)

04-24

MySQL 跨库查询示例场景分析

04-24

Mysql中的复合查询详解

04-24

MySQL数据库表内容的增删查改操作实例详解

04-24

MySQL UPDATE更新数据方式

04-24

mysql密码忘了的问题及解决方案

04-24

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论