12. 数据类型

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 12. 数据类型

字符串类型

数据类型 长度 备注
char(x) 固定长度 x为1到255之间的整数
varchar(x) 可变长度 x为1到65535之间的整数,最多65535个字符,64KB
mediumtext 最长16MB
longtext 最长4GB
tinytext 最长255b
text 最长64KB
注意: 为了维护数据库的一致性,可变长的字符串长度设置最好也能分类。varchar(50) 表示短字符串,varchar(255) 表示中等长度字符串,可以不用经常检查

国际字符:所有这些字符串类型都支持国际字符,其中:

  • 英文字符占1个字节
  • 欧洲和中东语言字符占2个字节
  • 像中日这样的亚洲语言的字符占3个字节 所以,如果一列数据的类型为 CHAR(10),MySQL会预留30字节给那一列的值

整数类型

数据类型 长度 备注
tinyint 1b [-128, 127]
unsigned tinyint 1b [0, 255]
smallint 2b [-32k, 32k]
mediumint 3b [-8M, 8M]
int 4b [-2B, 2B]
注意: 如果试图存入超过范围的数字,MySQL会报错

MySQL 还可以根据 INT 后面的数字来决定显示成什么样子,但是,这并不影响数字在MySQL中的存储

例如:1  int(4) =>  0001

用最小的能满足需求的数据类型,这样数据库大小会更小,查询执行也会更快。

顶点和浮点类型

数据类型 类型 备注
decimal(p, s) 定点数类型 p,s分别表示精度(1~65)和小数位数
dec 定点数类型 同上
numeric 定点数类型 同上
fixed 定点数类型 同上
float 浮点数类型 4b
double 双精度浮点数类型 8b

如果需要记录精确的数字,比如货币金额,就是用 DECIMAL 类型

如果要进行科学计算,要处理很大或很小的数据,而且精确值不重要的话,就用 FLOATDOUBLE

布尔类型

  • bool
  • boolean

枚举和集合类型

ENUM() 从固定一系列值中取一个值

ENUM('small','medium','large') 表示这个类型中的值是括号内元素之一

SET() 和 ENUM() 类似,但是可以存多个值

不建议使用:

  1. 两者的类型不好复用,一旦某个地方修改,所有其他的地方都要修改,不如使用一张关系表,只需要多添加一条查询语句就可以实现
  2. 如果要修改enum类型中的值,会导致重建整张表,如果表中的数据很多,会非常耗费时间。

日期和时间类型

数据类型 大小 作用
date 有日期没时间
time 有时间没日期
datetime 8b 包含日期和时间
timestamp 4b 时间戳,常用来记录一行数据的的插入或最后更新时间
year 专门储存四位的年份

blob类型

Blob 类型来储存大的二进制数据,包括PDF,图像,视频等等几乎所有的二进制的文件

具体来说,MySQL里共有4种 Blob 类型,它们的区别在于可储存的最大文件大小:

数据类型 大小
tinyblob 255b
blob 65KB
mediumblob 16MB
longblob 4GB

一般来说最好不要把文件存在数据库中,因为关系型数据库是为了处理结构化关系型数据库设计的会导致以下问题:

  1. 迅速增加数据库的大小
  2. 弱化数据备份功能
  3. 出现性能问题
  4. 在数据库中读取或者存储图像必须额外写代码

JSON类型

sql

复制代码

update products
set properties = '
{
  "dimensions":[1,2,3],
    "weight":10,
    "manufacturer":{
    "name":"sony"
    }
}
'
where product_id = 1;

上面的语句可以用MySQL内置的函数替换

sql

复制代码

update products
set properties = json_object(
  'weight','10',
    'dimensions',json_array(1,2,3),
    'manufacturer',json_object('name','sony')
)
where product_id = 1;

还可以通过已经有的 MySQL 解析函数解析 JSON 格式

sql

复制代码

select product_id,json_extract(properties,'$.weight') as weight
from products
where product_id = 1;

还可以使用 -> 更简洁,后面可以继续通过 点 来调用

sql

复制代码

select product_id,properties -> '$.weight'
from products
where product_id = 1;

但是上面的结果数据都是由引号的,可以使用 ->> 来去掉,只返回值

sql

复制代码

select product_id,properties ->> '$.weight'
from products
where product_id = 1;

在查询语句里面也可以直接使用

sql

复制代码

select product_id,properties ->> '$.weight'
from products
where properties ->> '$.weight' = '10';

更新 json 中的某些值 下面的 json_set 和 json_remove 都是拾取一个 json 对象,修改并返回一个新的 json 对象

我们其实是把这些属性设置到了一个由这个函数返回的新json对象

sql

复制代码

update products
set properties = json_set(
  properties,
    '$.weight', 20,
    '$.age',10
)
where product_id = 1;
update products
set properties = json_remove(
  properties,
    '$.weight', 20,
    '$.age',10
)
where product_id = 1;


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
存储 程序员 C++
4数据类型
4数据类型
35 1
|
7月前
|
存储 安全 编译器
C++系列二:数据类型
C++系列二:数据类型
|
6月前
|
存储 JSON 关系型数据库
|
7月前
|
存储 C语言
初识数据类型
本文介绍了编程中的几种基本数据类型,包括`char`、`int`、`float`、`double`和`_Bool`。`char`用于存储单个字符,如`'a'`;`int`用于整数,如`10`;`float`和`double`分别代表单精度和双精度浮点数;`_Bool`是布尔类型,表示真假,值为`true`或`false`。在C语言中,0被视为假,非0视为真。示例代码展示了这些数据类型的使用方法。
55 3
|
6月前
|
C++
C++数据类型
C++数据类型
|
7月前
|
存储 编译器 程序员
c++数据类型
c++数据类型
40 2
|
7月前
|
存储
C数据类型
C数据类型。
32 1
|
7月前
|
存储 SQL 关系型数据库
十、数据类型
十、数据类型
65 0
|
存储 程序员 C语言
C++的数据类型
C++的数据类型
|
编译器 C语言 C++
C++——数据类型的比较
C++——数据类型的比较