跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL

SQL 常用数据类型详解

MySQL 中的主要数据类型。包括位类型 bit,小数类型 float 与 decimal(精度区别),字符串类型 char 与 varchar(定长与变长对比),日期时间类型 date、datetime 及 timestamp(存储范围与自动更新特性),以及枚举类型 enum 和集合类型 set(单选与多选)。文章通过代码示例说明了各类型的定义方式、存储空间、精度限制及使用场景,如使用 FIND_IN_SET 查询集合字段等。

邪神洛基发布于 2026/3/29更新于 2026/10/22101 浏览
SQL 常用数据类型详解

1. bit

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

如果我们有这样的值,只存放 0 或 1,这时可以定义 bit(1)。这样可以节省空间。

mysql> create table tt4 ( id int, a bit(8)); Query OK, 0 rows affected (0.01 sec)

同时它是按照 ASCII 码对应的值显示。比如下面这张图里面,65 是 A 所对应的 ASCII。

2. float(小数类型)

float[(m, d)] [unsigned] : m 指定显示长度,d 指定小数位数,占用空间 4 个字节

这个 m 的意思是小数点前面的位数加上小数点后面的个数要等于这个 m,同时如果用户输入的数大于这个 m 的话,它会先按照四舍五入的方式尝试截断处理,如果结果符合这个 m 的话那它就显示 OK,不然的话就插入失败。

我们先设置一个总长度为 4,小数点后面有 2 位的 salary。

create table tt6(id int, salary float(4,2));

在下面这张图里面 -99.991,最后的一个 1 被四舍五入掉了。如果我们把这个 1 换成 5,那么这边就会插入失败。

3. decimal(小数类型)

decimal(m, d) [unsigned] : 定点数 m 指定长度,d 表示小数点的位数

这个看起来和上面那个 float 一样,区别在于这个 decimal 的精度更高。

float 表示的精度大约是 7 位。 decimal 整数最大位数 m 为 65。支持小数最大位数 d 是 30。如果 d 被省略,默认为 0。如果 m 被省略,默认是 10

我们看下面的代码和结果,在高精度的情况下,decimal 可以保持更高的精度。

mysql> create table tt8 ( id int, salary float(10,8), salary2 decimal(10,8));

4. char(字符串类型)

char(L): 固定长度字符串,L 是可以存储的长度,单位为字符,最大长度值可以为 255

这个没什么好说的,就是普通的 char 类型,在这边写出来是为了和下面的 varchar 来进行对比

5. varchar(字符串类型)

varchar(L): 可变长度字符串,L 表示字符长度,最大长度 65535 个字节

我们来看下面的这张图,varchar 里面的 L 是 6,表示这里可以存放 6 个字符。但是如果我们只填入 5 个字符的话,那它就只显示 5 个字符。但是如果我们填入超过 6 个字符的话,那就会报错。所以我们可以发现,这个 varchar 有点像那个 vector,只不过这个'vector'的上限被 L 给锁定了。

那么我们在一些情况下该如何进行选择呢?

  1. 如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
  2. 如果数据长度有变化,就使用变长 (varchar),比如:名字,地址,但是你要保证最长的能存的进去。
  3. 定长的磁盘空间比较浪费,但是效率高。
  4. 变长的磁盘空间比较节省,但是效率低。
  5. 定长的意义是,直接开辟好对应的空间
  6. 变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

6. 日期和时间类型

常用的日期有如下三个:

  • date :日期 'yyyy-mm-dd' ,占用三字节。
  • datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999,占用八字节。
  • timestamp :时间戳,从 1970 年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节。

我们来看下面这张图片,其中 date 类型的 t1 就是显示年月日,datetime 类型的 t2 就是显示年月日加上时分秒,而 timestamp 类型的 t3 不用我们自己设置,它会自动给自己加上执行这条指令时的时间。

同时如果我们更新了其中的一条数据,那么 timestamp 也会自动更新时间。

7. enum 和 set

enum:枚举,'单选'类型;enum('选项 1','选项 2','选项 3',...);set:集合,'多选'类型;set('选项值 1','选项值 2','选项值 3', ...);

他们的区别就是 enum 是单选,而 set 是多选。

我们看下面这张图片,其中 set 类型的 hobby 我们插入了两个值,而 enum 我们只可以插入一个。

我们看下面这张图,如果我们要查找 hobby=B 的,那么 1 和 2 就不会被选出来,因为这条查找是只有 B 的。

如果我们要查找出所有含有 B 的,那么我们应该用FIND_IN_SET函数。

通过这个函数我们就可以查找出所有含有 B 的。

目录

  1. 1. bit
  2. 2. float(小数类型)
  3. 3. decimal(小数类型)
  4. 4. char(字符串类型)
  5. 5. varchar(字符串类型)
  6. 6. 日期和时间类型
  7. 7. enum 和 set

更多推荐文章

查看全部
  • Linux 通过 NFS 挂载群晖 NAS 共享文件夹
  • Ollama:一条命令在本地运行 Llama2 等大模型
  • 爬虫开发:Cookies 模拟浏览器登录技术详解
  • 开源知识库 RAGFlow 从部署到实战操作详解
  • Web 聊天室消息加解密方案详解
  • 阿里开源 iFlow CLI:终端级 AI 智能体初探
  • 适配 imToken DApp 浏览器的区块链小游戏开发实战
  • 前缀和与二维前缀和算法模板详解
  • 数据中台血缘可视化实践:基于 Neo4j 的图数据库方案
  • Java 初认识
  • 零基础到精通 AI 大模型:详细学习路线与实践技巧
  • OpenAI O1 模型复现思想与多模态大模型在数学推理中的应用总结
  • AI 驱动的开发者:使用 ChatGPT 和 Copilot 构建出色软件
  • 开源 IPTV 播放器 iptvnator 功能与使用指南
  • 金仓数据库 SQL 防火墙:白名单驱动的内生安全防护
  • 基于 LangChain 构建数据库问答机器人
  • OpenClaw 接入飞书机器人并集成 Ollama 本地大模型实战
  • WSL 安装配置指南:Ubuntu 子系统部署与常用命令
  • 持续集成选型:Jenkins 与 GitLab CI 对比
  • 网络安全入门教程:从零基础到精通的详细指南

相关免费在线工具

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online