MySQL 运维实战课
张新铭(俊达)
云掣科技资深数据库专家,前淘宝网、支付宝数据库专家
550 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 6 讲/共 41 讲
MySQL 运维实战课
15
15
1.0x
00:00/00:00
登录|注册

05|你用对数据类型了吗?

你好,我是俊达。
我们都知道,在关系型数据库中,数据存储在表里面,表由若干个列组成,每个列都有各自的数据类型。MySQL 数据库支持一些基本的数据类型,包括串(String)类型、数值类型、日期和时间类型,MySQL 新版本还支持一些复杂的数据类型,包括 JSON 类型、空间数据类型(Spatial Data Types)。
那么,在设计表结构时,应该如何选择每个列的数据类型呢?总体来说,我们需要根据业务的需求来确定数据类型。在这一讲中,我们就来详细聊一聊 MySQL 中基础数据类型的特点和适用场景,至于复杂的数据类型,这节课先不做太多的讨论。

串(String)类型

好,接下来我们就先从串类型开始讲起。
串类型可分为定长类型和变长类型。定长类型又包括 CHAR 和 BINARY,变长类型包括 VARCHAR、VARBINARY、TEXT 和 BLOB。下面我们通过一些简单的例子来熟悉一下这些数据类型。

字符串类型

CHAR(N)

首先是 CHAR 类型的一些例子。
mysql> create table t_char(a char(10));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t_char values(' 中文符号 ');
Query OK, 1 row affected (0.00 sec)
mysql> select length(a), char_length(a) from t_char;
+-----------+----------------+
| length(a) | char_length(a) |
+-----------+----------------+
| 14 | 6 |
+-----------+----------------+
1 row in set (0.00 sec)
mysql> select a, hex(a), concat('{', a, '}') as aa from t_char;
+------------+------------------------------+--------------+
| a | hex(a) | aa |
+------------+------------------------------+--------------+
| 中文符号 | 2020E4B8ADE69687E7ACA6E58FB7 | { 中文符号} |
+------------+------------------------------+--------------+
1 row in set (0.00 sec)
mysql> insert into t_char values('0123456789A');
ERROR 1406 (22001): Data too long for column 'a' at row 1
mysql> create table t_char(a char(256)) charset utf8mb4;
ERROR 1074 (42000): Column length too big for column 'a' (max = 255); use BLOB or TEXT instead
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. MySQL数据库中的基本数据类型包括串(String)类型、数值类型、日期和时间类型,以及一些复杂的数据类型如JSON类型和空间数据类型(Spatial Data Types)。 2. 应该根据业务需求来确定每个列的数据类型,避免设置过大的字段长度,以避免超出MySQL和存储引擎的限制。 3. 串类型包括定长类型(CHAR和BINARY)和变长类型(VARCHAR、VARBINARY、TEXT和BLOB),它们在存储和使用上有不同的特点和限制。 4. CHAR类型的数据存储时会使用空格填充到指定长度,而VARCHAR类型则根据实际存储的数据决定占用的空间。 5. 在定义VARCHAR类型时,应该根据业务实际需要存储的数据长度来设置字段长度,避免定义过大的长度导致不必要的空间占用和行长度限制。 6. MySQL和存储引擎对行长度都有限制,超出限制会导致建表失败,因此需要合理设置字段长度以避免超长数据的写入。 7. 为VARCHAR字段设置合理的长度能够避免业务写入超长的数据,对业务实际上也是一种保护。 8. 数据类型的选择应该根据业务需求和实际数据长度来合理设置,以保证数据存储的有效性和性能的最优化。 9. 整数类型和小数类型的选择应根据业务需求和数据范围来确定,以满足存储需求和避免数据溢出。 10. 设计表结构时,需要根据业务的需求,选择合适的数据类型,考虑空间占用情况、Not Null约束、字符集设置等因素。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 运维实战课》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)