惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Security Archives - TechRepublic
Security Archives - TechRepublic
P
Proofpoint News Feed
C
CERT Recently Published Vulnerability Notes
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
P
Palo Alto Networks Blog
Know Your Adversary
Know Your Adversary
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cisco Talos Blog
Cisco Talos Blog
L
Lohrmann on Cybersecurity
AWS News Blog
AWS News Blog
J
Java Code Geeks
博客园_首页
Scott Helme
Scott Helme
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
T
The Exploit Database - CXSecurity.com
Security Latest
Security Latest
V
Visual Studio Blog
Cloudbric
Cloudbric
Jina AI
Jina AI
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
A
Arctic Wolf
C
Cybersecurity and Infrastructure Security Agency CISA
S
SegmentFault 最新的问题
The Last Watchdog
The Last Watchdog
SecWiki News
SecWiki News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
W
WeLiveSecurity
K
Kaspersky official blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hacker News: Ask HN
Hacker News: Ask HN
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
量子位
Google Online Security Blog
Google Online Security Blog
博客园 - Franky
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - 三生石上(FineUI控件)
Recent Commits to openclaw:main
Recent Commits to openclaw:main

博客园 - lzhdim

JavaScript 中的原型与继承 1分钟查清局域网所有IP 20260714 - 个人小作品更新 WorkBuddy 完整教程手册 专为AI而生的企业级QLC SSD!长江存储PE501 61.44TB评测:超过1PB的写入测试 32GB显存才是第一生产力!英特尔锐炫 Pro B70评测:中小企业AI降本神器 JavaScript中的this关键字 C#开发的PopoSaver泡泡屏保应用 - 开源研究系列文章 - 个人小作品 6天不间断测试告诉你到底有多省电!米家空调巨省电大1.5匹评测:制冷峰值功率不超过500W 三倍双摄加持 + D-Log 2 曲线!大疆DJI OSMO Pocket 4P全面评测:补齐短板,化身口袋电影机 晶栈4.0闪存立威!长江存储致态TiPro9000 2TB SSD评测:缓外写入超4GB/s独一档 C# 多线程同步机制详解:原理、使用与性能对比 JavaScript作用域与闭包讲解 最受欢迎的 10 大免费 AI 工具 六种AI生意,从月入一万到月入十万 5个国产大模型实测对比2026:DeepSeek、Kimi、豆包、通义、智谱哪个好用 豆包、元宝、千问、Kimi、DeepSeek,这么多AI软件,到底该用哪个? 微软免费开源了一个 Linux 操作系统,没错!是微软出品 一次看懂5种咖啡冲煮方式:意式、手冲、法压、冷萃、摩卡壶到底有什么区别 120个 实用CSS 技巧汇总合集 JavaScript运算符与表达式详解 C#开发的ScreenSaver屏保应用 - 开源研究系列文章 - 个人小作品 WinForm 中跨线程操作 UI 的解决方案 JavaScript变量与数据类型详解 苹果良心!iOS 27适配设备公布:30款机型 7年前的iPhone 11还能升级 C++图形用户界面开发入门 10个不该免费的GitHub神级项目 JavaScript语言全面概述:从历史到现代实践 一张图看懂常见咖啡 C盘空间多出来4GB:谷歌服软 Chrome本地AI大模型可禁用、删除了 96GB显存运行230B大模型!七彩虹灵创K16笔记本评测:160W性能释放 AMD锐龙AI Max+ 395加持全能移动AI工作站 AI PC最强存储搭档!雷克沙NM1090 PRO 8TB固态评测:14400MB/s满速不缩水 C#已经不是当年的C#了——我用它写了个微秒级数据库引擎 EasyTool:轻量全能的 .NET 工具类库 SQL 入门 16:SQL 事务隔离级别与死锁解析(易懂) 原相3955XM+TL3228主控!小米电竞鼠标2全面评测:原生双8K究竟有多强 PCIe 4.0火力全开:闪迪奥丁马仕GX 7100 NVMe SSD上手 超乎预料的千元级电竞主板!七彩虹iGame B850M Ultra-OC V14主板评测 SQL 入门 15:SQL 事务:从 ACID 到四种常见的并发问题 名人 - 我的闪存 C#性能优化技巧 SQL 入门 14:SQL 触发器与事件:自动化数据处理 38个实用的JavaScript 技巧 一款基于 .Net WinForm 开发的节点编辑器,纯 GDI 实现,体积仅 100+Kb Masuit.Tools:这个 C# 工具库 SQL 入门 13:SQL 存储过程与函数:封装逻辑与参数处理 49个 JavaScript 代码快捷技巧,让你在 2026 年成为代码高手 20260503 - 个人小作品更新 SQL 入门 12:SQL 视图:创建、修改与可更新视图 C#如何实现Windows系统桌面截图功能... 6999元AMD新旗舰首测!锐龙9 9950X3D2性能解禁:这颗U根本不是给游戏玩家造的 SQL 入门 11:日期时间格式化、IF、CASE的使用 基于C#的校时类库的实现及使用 - 开源项目研究文章
SQL 入门 17:MySQL 数据类型:从字符串到 JSON 的全面解析
lzhdim · 2026-06-01 · via 博客园 - lzhdim

Posted on 2026-06-01 00:00  lzhdim  阅读(1754)  评论()    收藏  举报

MySQL 提供丰富的数据类型,支持从简单的字符串到复杂的 JSON 和二进制数据,满足多样化的存储需求。本文基于 sql_store 数据库,系统讲解 MySQL 的主要数据类型,包括字符串、数值、日期时间、BLOB、JSON 等,结合代码示例说明其定义、应用场景及操作方法,帮助读者合理选择数据类型以优化数据库设计。

学习内容

1. 字符串类型

字符串类型用于存储文本数据,常见类型包括:

  • CHAR:固定长度字符串,最大 255 个字符,长度不足时用空格填充,适合长度一致的数据(如状态码)。
  • VARCHAR:可变长度字符串,最大 65,535 字节(约 21,844 个 UTF-8 字符),动态分配存储空间,适合长度变化较大的数据(如用户名)。
  • TEXT 系列
    • TINYTEXT:最大 255 字节。
    • TEXT:最大 65,535 字节。
    • MEDIUMTEXT:最大 16,777,215 字节(约 16 MB)。
    • LONGTEXT:最大 4,294,967,295 字节(约 4 GB)。 适用于存储长文本,如文章或日志。

应用场景

  • 电话号码等不需计算的数值可存储为 VARCHAR。
  • 名字、密码建议用 VARCHAR(50),地址用 VARCHAR(255)。
  • 超长文本(如文章)使用 MEDIUMTEXT 或 LONGTEXT。

2. 数值类型

数值类型分为整数和浮点数,支持精确和近似存储:

  • 整数类型
    • TINYINT:1 字节,有符号 -128 到 127,无符号 0 到 255。
    • SMALLINT:2 字节,有符号 -32,768 到 32,767,无符号 0 到 65,535。
    • MEDIUMINT:3 字节,有符号 -8,388,608 到 8,388,607,无符号 0 到 16,777,215。
    • INT(或 INTEGER):4 字节,有符号 -2,147,483,648 到 2,147,483,647,无符号 0 到 4,294,967,295。
    • BIGINT:8 字节,有符号 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807,无符号 0 到 18,446,744,073,709,551,615.
    • 使用 UNSIGNED 指定无符号范围,如 UNSIGNED TINYINT。
    • ZEROFILL 补零显示,控制输出格式。
  • 浮点数
    • DECIMAL(p,s):固定精度,p 为总位数(1-65),s 为小数位数,适合精确计算(如货币)。别名包括 DEC、NUMERIC、FIXED。
    • FLOAT:4 字节,近似值,适合大范围数值。
    • DOUBLE:8 字节,近似值,精度高于 FLOAT。

应用场景

  • 年龄使用 UNSIGNED TINYINT,范围足够且节省空间。
  • 财务数据使用 DECIMAL 确保精度。

3. 布尔类型

BOOLEAN(或 BOOL)存储 TRUE 或 FALSE,实际以 TINYINT(1) 实现,0 表示 FALSE,1 表示 TRUE。

4. 枚举与集合类型

  • ENUM:限制列值在指定列表中,如 ENUM('SMALL', 'MEDIUM', 'LARGE'),适合固定选项(如尺码)。建议将枚举值存储为单独表以提高灵活性。
  • SET:类似 ENUM,但允许存储多个值,如 SET('A', 'B', 'C'),适合多选场景。

5. 日期与时间类型

日期时间类型支持多种格式:

  • DATE:存储日期,格式 YYYY-MM-DD,范围 1000-01-01 到 9999-12-31。
  • TIME:存储时间或持续时间,格式 HH:MM:SS,范围 -838:59:59 到 838:59:59。
  • DATETIME:存储日期和时间,格式 YYYY-MM-DD HH:MM:SS,范围 1000-01-01 00:00:00 到 9999-12-31 23:59:59。
  • TIMESTAMP:类似 DATETIME,但以 UTC 存储,支持 1970-01-01 00:00:01 到 2038-01-19 03:14:07,自动转换时区。
  • YEAR:存储年份,格式 YYYY,范围 1901 到 2155。

应用场景:订单日期使用 DATETIME,日志时间使用 TIMESTAMP。

6. BLOB 类型

BLOB(二进制长对象)存储二进制数据,如图片、视频、PDF 等:

  • TINYBLOB:最大 255 字节。
  • BLOB:最大 65,535 字节(约 64 KB)。
  • MEDIUMBLOB:最大 16,777,215 字节(约 16 MB)。
  • LONGBLOB:最大 4,294,967,295 字节(约 4 GB)。

应用场景:小型图标用 TINYBLOB,大型视频用 LONGBLOB。

7. JSON 类型

JSON 类型存储结构化数据(如对象、数组),便于处理复杂数据。格式示例:

{
  "name": "John",
  "age": 30,
  "isStudent": false
}

支持嵌套结构、数组和多种数据类型,适合动态或半结构化数据。

示例代码与讲解

1. 创建 JSON 列

ALTER TABLE products
ADD COLUMN properties JSON;

为 products 表添加 properties 列,用于存储 JSON 格式数据。

2. 插入 JSON 数据

方法 1:直接插入 JSON 字符串

UPDATE products
SET properties = '{
  "dimensions": [1, 2, 3],
  "weight": 10,
  "manufacturer": {"name": "sony"}
}'
WHERE product_id = 1;

方法 2:使用 JSON 函数

UPDATE products
SET properties = JSON_OBJECT(
  'dimensions', JSON_ARRAY(1, 2, 3),
  'weight', 10,
  'manufacturer', JSON_OBJECT('name', 'sony')
)
WHERE product_id = 1;

两种方法将 JSON 数据存储到 product_id = 1 的 properties 列,包含数组、数值和嵌套对象。

3. 查询 JSON 数据

SELECT * FROM products WHERE product_id = 1;

返回 properties 列的 JSON 对象。

4. 提取 JSON 值

**使用 JSON_EXTRACT**:

SELECT product_id, JSON_EXTRACT(properties, '$.weight')
FROM products
WHERE product_id = 1;

**使用路径运算符 ->**:

SELECT product_id, properties -> '$.weight'
FROM products
WHERE product_id = 1;

提取 weight 键的值,返回 10。

提取数组元素

SELECT product_id, properties -> '$.dimensions[0]'
FROM products
WHERE product_id = 1;

提取 dimensions 数组的第一个元素,返回 1。

提取嵌套对象(去引号)

SELECT product_id, properties ->> '$.manufacturer.name'
FROM products
WHERE product_id = 1;

使用 ->> 提取 manufacturer.name,返回 sony(无引号)。

5. 修改 JSON 数据

UPDATE products
SET properties = JSON_SET(
  properties,
  '$.weight', 20,
  '$.age', 25
)
WHERE product_id = 1;

修改 weight 为 20,添加 age 键,值为 25。

6. 删除 JSON 键

UPDATE products
SET properties = JSON_REMOVE(properties, '$.age')
WHERE product_id = 1;

删除 age 键,保留其他 JSON 数据。

总结

MySQL 的数据类型涵盖字符串、数值、日期时间、BLOB 和 JSON,满足从简单文本到复杂结构化数据的存储需求。合理选择数据类型(如用 UNSIGNED TINYINT 存年龄、DECIMAL 存货币)可优化存储空间和性能。JSON 类型为半结构化数据提供灵活支持,结合路径运算符和函数,便于操作复杂数据。本文基于 sql_store 数据库,通过代码示例解析数据类型的定义与应用。后续内容将探讨表设计或查询优化,敬请关注。