SQL 数据类型

本文详细介绍了各种数据库数据类型,包括整数、浮点数、字符串、日期、布尔和二进制类型,以及它们的适用场景。强调了VARCHAR在存储非定长字符串时的优势,以及使用JSON类型存储配置文件的便利性。此外,文章还讨论了枚举和集合类型的使用限制,并提醒读者谨慎使用这些类型。
摘要由CSDN通过智能技术生成

数据类型

整数类型

关键词最大长度
TINYINT[-128, 127]
UNSIGNED TINYINT[0, 255]
SMALLINT[-32k, 32k]
MEDIUMINT[-8M, 8M]
INT[-2B, 2B]
BIGINT[-9Z, 9Z]

整数类型多为定长换句话说,如果你定义了一个长度为3的INT类型,输入一个1会默认前边加两个0。也就是占了额外的空间开销。所以如果你需要存储一个人的年龄可以尽量使用UNSIGNED TINYINT

浮点数类型

DECIMAL(p,s),p的范围为1-65,s是小数点后的位数。

如果你定义了一个DECIMAL(6,2)指的是小数点前4位,小数点后2两位。

有的数据库中也是用DEC/NUMERIC/FIXED等来代替DECIMAL

双精度的浮点数常用于进行科学计算。他们并不存储准确值。有两个FLOAT/DOUBLE前者占四字节,后者占八字节。

字符串类型

关键字最大长度
CHAR
VARCHAR64KB(65,535)
TINYTEXT255bytes
TEXT64KB
MEDIUMTEXT16MB
LONGTEXT4GB

下面是一些我写代码的小技巧:

非定长数据的短字符串设置长度为VARCHAR(50)(用户名,密码),长字符串设置为VARCHAR(255)(地址,简介)。

类型是支持国际字符的其中英文占一个字符,中文UNIONCODE占两个字符,UTF8占三个字符。

在一定的长度范围内我们最好采用VARCHAR类型,因为VARCHAR类型可以被编入索引之中。

布尔类型

BOOL/BOOLEAN,都可以用来表示真假。

我们用TRUE或者1来表示真的,FLASE或者0表示假的。

我一般用TINYINT来存储状态,令1表示存在,0表示不存在。

日期类型

关键词解释例子
DATE日期2021-01-01
TIME时间01:02:03
TIMESTAMP时间戳因为长度问题只能到2038年
DATETIME日期加时间2021-01-01 01:02:03

枚举类型

比如我们有一个型号字段只能有三个值small,medium,big

我们就需要通过ENUM('small','medium','big')的方式定义该字段。

个人感觉枚举类型要尽量少用。原因是因为后续想要改变它的组成可能要颇费功夫。你可以通过建立型号表与连接表来实现这个功能,并且使用更加灵活。

集合类型

SET换掉ENUM就是集合了。同样不推荐使用。

二进制类型

主要是为了将音频视频等文件类型化作二进制存取。

关键词大小
TINYBLOB255b
BLOB65KB
MEDIUMBLOB16MB
LONGBLOB4GB

我并没有用过这个数据类型,我觉得文件应该存在他们应该存在的地方,此处使用可能会增加数据库的负担。

甚至可能要写一系列的代码将文件先转化为数据库。

JSON类型

这个类型是MySQL8以后存在的,对JSON类型有所了解的人应该知道这个是干嘛的,它可以用于存储对象。

个人喜欢用它来放配置文件。

update table1
set properties=JSON_OBJECT(
    'key1', 10,
    'key2', JSON_ARRAY(1,2,3),
    'key3', JSON_OBJECT('name','wang')
)
where id=1;

JSON_ARRAY()会解析为JSON数组,JSON_OBJECT()解析为JSON对象。

select id,JSON_EXTRACT(properties,'$.key1'),JSON_EXTRACT(properties,'$.key2[0]'),JSON_EXTRACT(properties,'$.key3.name')
from table1;
--简写
select id,properties->'$.key1',properties->'$.key3.name',properties->>'$.key3.name'
from table1;

JSON_EXTRACT()方法可以解析JSON串获取对象,第一个参数是字段名,第二个参数是想要查询的键名(会返回值)。$相当于这段json对象。

双箭头可以去掉查询到的字符串的双引号。

更改JSON值

update table1
set properties=JSON_SET(
    properties,
    '$.key1', 12,
    '$.key2',
    '$.key4', "22"
)
where id=1;

JSON_SET的第一个参数是字段名,后边是需要更改的键路径紧跟着是它的值。

注意,已经存在的键会更新值,不存在的键会增加进去。如果一个键路径后边并没有跟值,那就会删去这个键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值