一篇文章带你弄懂数据库里面的基础数据类型

数据库的基本数据类型

阅读指南:

这是数据库系列的第二篇文章,感兴趣的读者可以阅读我的有关数据库的合集,一套系统性的基础教程,帮助读者们更全面的学习数据库的相关知识。

合集链接:
数据库详细基本教程

库的数据类型

1.整数类型

SQL的标准整数类型:

类型 存储字节 有符号区间 无符号区间
SMALLINT 2 -2^15~ 2^15-1 0 ~ 2^16
INT(INTEGER) 4 -2^31 ~ 2^31-1 0 ~ 2^32

独属于MySQL的整数类型:

类型 存储字节 有符号区间 无符号区间
TINYINT 1 -2^7~ 2^7-1 0 ~ 2^8
MEDIUMINT 3 -2^23 ~ 2^23-1 0 ~ 2^24
BIGINT 8 -2^63 ~ 2^63-1 0 ~ 2^32

例:

sql 复制代码
stu_age TINYINT unsigned COMMENT '学生年龄,无符号',

注:

无符号的整数类型要添加 unsigned 修饰符。

2.浮点类型

类型 存储字节 M(小数+整数位数) D(小位数)
FLOAT(M, D) 4 M最大为24 D最大为8
DOUBLE(M, D) 8 M最大为53 D最大为30

例:

sql 复制代码
stu_height float(4, 1) unsigned COMMENT '身高,保留一位小数,总共四位数,多位则四舍五入',

注: 现行的MySQL并不推荐使用这两种方法,未来版本可能会取消对他的支持。在如今的话,对于数据要求的精度并不是过高的话,可以使用。

3.定点数类型

类型 存储字节 M(小数+整数位数) D(小位数)
DECIMAL(M, D) 动态计算 M最大为65 D最大为30

例:

sql 复制代码
emp_salary DECIMAL(8, 1) COMMENT '工资,保留一位小数,总共八位数,多位则四舍五入',

注:

DECIMAL类型的存储空间是可变的,他的存储大小受DECIMAL数据类型定义是指定的精度和规模影响度。如果D为0,则DECIMAL定义的值不包含小数部分。

4.字符串类型

字符串 特点 长度 长度范围(字符) 存储空间
CHAR(M) 固定长度 M 0<= M <= 255 M * 4 个字节
VARCHAR(M) 可变长度 M 最多为2^16 - 1 M * 4 +1 个字节

注:

CHAR类型:

  • 一般需要提前定义字符串长度,如果不指定M,则默认是1个字符。

  • 保存数据时,若声明的字符串长度大于实际字符串长度,会在右边补空格。

  • 当MySQL检索数据时,会自动去掉CHAR类型的数据的尾部空格。

VARCHAR类型:

  • 定义时必须指定M,否则报错。
  • 在MySQL5.0版本以上,VARCHAR(20) 指的是20个字符。
  • 当MySQL检索数据时,会保留VARCHAR类型的数据的尾部的空格。

当存储对象较大时,则考虑将字符串类型转为文本类型数据来存储。

5.文本类型

文本字符串类型 特点 长度 长度范围(字符) 存储空间
TINYTEXT 小文本,可变长度 L 0<= M <= 255 L + 2 个字节
TEXT 文本,可变长度 L 0<= M <= 2^16 − 1 L + 2 个字节
MEDIUMTEXT 中等文本,可变长度 L 0<= M <= 2^24 - 1 L + 3 个字节
LONGTEXT 大文本,可变长度 L 0<= M <= 2^32 - 1 L + 4 个字节

例:

sql 复制代码
CREATE TABLE 表名{
	tx TEXT
}

注:

  • 短文本,固定长度使用char,例如:性别,手机号;

  • 短文本,非固定长度使用VARCHAR,例如:姓名,地址;

  • 大文本,建议存储到文本文件,使用VARCHAR记录文件地址,不使用TEXT直接存储大文本,这很耗性能。

6.时间类型

类型 名称 字节 日期格式 小值 最大值
YEAR 1 YYYY或YY 1901 2155
TIME 时间 3 HH:MM:SS -838:59:59 838:59:59
DATE 日期 3 YYYY-MM-DD 1000-01-01 9999-12-03
DATETIME 日期时间 8 YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 9999-12-31 23:59:59
TIMESTAMP 日期时间 4 YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:00 2038-01-19 03:14:07

在对使用DATATIME和TIMESTAMP类型是,可以让他自动初始化和更新:

sql 复制代码
# 方式一: 插入默认当前时间和修改自动更新当前时间
ts TIEMSTAMP DEFAULT CURENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,	# 添加约束
dt DATETIME CRRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

# 方法二: 插入默认当前时间
ts TIEMSTAMP DEFAULT CURENT_TIMESTAMP,
dt DATETIME DEFAULT CURENT_TIMESTAMP,
相关推荐
一只叫煤球的猫1 小时前
写代码很6,面试秒变菜鸟?不卖课,面试官视角走心探讨
前端·后端·面试
bobz9652 小时前
tcp/ip 中的多路复用
后端
bobz9652 小时前
tls ingress 简单记录
后端
你的人类朋友3 小时前
什么是OpenSSL
后端·安全·程序员
bobz9653 小时前
mcp 直接操作浏览器
后端
程序新视界4 小时前
MySQL中什么是回表查询,如何避免和优化?
mysql
前端小张同学6 小时前
服务器部署 gitlab 占用空间太大怎么办,优化思路。
后端
databook6 小时前
Manim实现闪光轨迹特效
后端·python·动效
武子康7 小时前
大数据-98 Spark 从 DStream 到 Structured Streaming:Spark 实时计算的演进
大数据·后端·spark
该用户已不存在7 小时前
6个值得收藏的.NET ORM 框架
前端·后端·.net