我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL常用数据类型及细节

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL常用数据类型及细节

MySQL常用数据类型及细节

MySQL的数据类型

类型 类型举例
整数类型 TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
浮点类型 FLOAT、DOUBLE
定点数类型 DECIMAL
位类型 BIT
日期时间类型 YEAR、TIME、DATE、DATETIME、TIMESTAMP
文本字符串类型 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
枚举类型 ENUM
集合类型 SET
二进制字符串类 BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
JSON类型 JSON对象、JSON数组
空间数据类型 单值类型:GEOMETRY、POINT、LINESTRING、POLYGON;集合类型:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、
  • 常见数据类型的属性
MySQL关键字 含义
NULL 数据列可包含NULL值
NOT NULL 数据列不允许包含NULL值
DEFAULT 默认值
PRIMARY KEY 主键
AUTO_INCREMENT 自动递增,适用于整数类型
UNSIGNED 无符号
CHARACTER SET name 指定一个字符集

1 整数类型

TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT

整数类型 字节
TINYINT 1
SMALLINT 2
MEDIUMINT 3
INT(INTEGER) 4
BIGINT 8

1.1 可选属性

1.1.1 M

M : 表示显示宽度,M的取值范围是(0, 255),该功能需要搭配“ZEROFILL”使用

从MySQL 8.0.17开始,整数数据类型不推荐使用显示宽度属性

整型数据类型可以在定义表结构时指定所需要的显示宽度,如果不指定,则系统为每一种类型指定默认的宽度值

1.1.2 UNSIGNED

UNSIGNED:无符号类型(非负)

1.1.3 ZEROFILL

ZEROFILL:零填充

2 浮点类型

FLOAT、DOUBLE、REAL

整数类型 字节
FLOAT 4
DOUBLE 8

2.1 精度误差

浮点数类型有个缺陷,就是不精准

在编程中,如果用到浮点数,要特别注意误差问题,因为浮点数是不准确的,所以我们要避免使用“=”来判断两个数是否相等。同时,在一些对精确度要求较高的项目中,千万不要使用浮点数,不然会导致结果错误,甚至是造成不可挽回的损失。

那么,MySQL 有没有精准的数据类型呢?当然有,这就是定点数类型: DECIMAL

从MySQL 8.0.17开始,FLOAT(M,D)DOUBLE(M,D)用法在官方文档中已经明确不推荐使用。另外,关于浮点型的UNSIGNED也不推荐使用了

3 定点数类型

MySQL中的定点数类型只有 DECIMAL 一种类型

DECIMAL(M,D) 的方式表示高精度小数

3.1 数据精度说明

M称为 精度 ,D称为 标度 。(M,D)M = 整数位 + 小数位D = 小数位0<=M<=65,0<=D<=30

例如,定义DECIMAL(5,2)的类型,表示该列取值范围是-999.99~999.99

3.2 类型介绍

  • DECIMAL(M,D)的最大取值范围与DOUBLE类型一样,但是有效的数据范围是由MD决定的
  • 定点数在MySQL内部是以 字符串 的形式进行存储,这就决定了它一定是精准
  • 当DECIMAL类型不指定精度和标度时,其默认DECIMAL(10,0)。当数据的精度超出了定点数类型的精度范围时,则MySQL同样会进行四舍五入处理。
  • DECIMAL可以添加UNSIGNED属性

4 位类型

BIT

BIT类型中存储的是二进制值,类似010110。

BIT(M)

长度 长度范围 占用空间
M 1 <= M <= 64 约为 (M + 7) / 8 个字节

BIT类型,如果没有指定(M),默认是1位。这个1位,表示只能存1位的二进制值。

使用b+0查询数据时,可以直接查询出存储的十进制数据的值

select b + 0 from table;

5 日期与时间类型

MySQL不同的版本可能有所差异

MySQL8.0版本支持的日期和时间类型主要有:YEAR类型、TIME类型、DATE类型、DATETIME类型和TIMESTAMP类型

  • YEAR 类型通常用来表示年
  • DATE 类型通常用来表示年、月、日
  • TIME 类型通常用来表示时、分、秒
  • DATETIME 类型通常用来表示年、月、日、时、分、秒
  • TIMESTAMP 类型通常用来表示带时区的年、月、日、时、分、秒

5.1 TIMESTAMP

TIMESTAMP类型也可以表示日期时间,其显示格式与DATETIME类型相同,都是 YYYY-MM-DD HH:MM:SS ,需要4个字节的存储空间

但是TIMESTAMP存储的时间范围比DATETIME要小很多,只能存储“1970-01-01 00:00:01 UTC”到“2038-01-19 03:14:07 UTC”之间的时间

存储数据的时候需要对当前时间所在的时区进行转换,查询数据的时候再将时间转换回当前的时区。因此,使用TIMESTAMP存储的同一个时间值,在不同的时区查询时会显示不同的时间。

5.2 TIMESTAMP与DATETIME的区别

  • TIMESTAMP存储空间比较小,表示的日期时间范围也比较小
  • 底层存储方式不同,TIMESTAMP底层存储的是毫秒值,距离1970-1-1 0:0:0 0毫秒的毫秒值。
  • 两个日期比较大小或日期计算时,TIMESTAMP更方便、更快。
  • TIMESTAMP和时区有关。TIMESTAMP会根据用户的时区不同,显示不同的结果。而DATETIME则只能反映出插入时当地的时区,其他时区的人查看数据必然会有误差的。

6 文本字符串类型

MySQL中,文本字符串总体上分为 CHAR 、 VARCHAR 、 TINYTEXT 、 TEXT 、 MEDIUMTEXT 、LONGTEXT 、 ENUM 、 SET 等类型。

6.1 CHAR与VARCHAR

类型 特点 长度 长度范围 占用的存储空间
CHAR(M) 固定长度 M 0 <= M <= 255 M个字节
VARCHAR(M) 可变长度 M 0 <= M <= 65535 (实际长度 + 1)个字节

6.1.1 CHAR

  • CHAR(M) 类型一般需要预先定义字符串长度。如果不指定(M),则表示长度默认是1个字符。
  • 如果保存时,数据的实际长度比CHAR类型声明的长度小,则会在 右侧填充 空格以达到指定的长度。当MySQL检索CHAR类型的数据时,CHAR类型的字段会去除尾部的空格。
  • 定义CHAR类型字段时,声明的字段长度即为CHAR类型字段所占的存储空间的字节数。

6.1.2 VARCHAR

  • VARCHAR(M) 定义时, 必须指定 长度M,否则报错。
  • 检索VARCHAR类型的字段数据时,会保留数据尾部的空格。VARCHAR类型的字段所占用的存储空间为字符串实际长度加1个字节。
#Column length too big for column "NAME" (max = 21845); 
CREATE TABLE test_varchar2(
    NAME VARCHAR(65535) #错误 
);

6.1.3 哪些情况使用CHAR或VARCHAR更好

具体存储引擎中的情况:

  • MyISAM 数据存储引擎和数据列:MyISAM数据表,最好使用固定长度(CHAR)的数据列代替可变长度(VARCHAR)的数据列。这样使得整个表静态化,从而使 数据检索更快 ,用空间换时间。
  • MEMORY 存储引擎和数据列:MEMORY数据表目前都使用固定长度的数据行存储,因此无论使用CHAR或VARCHAR列都没有关系,两者都是作为CHAR类型处理的。
  • InnoDB 存储引擎,建议使用VARCHAR类型。因为对于InnoDB数据表,内部的行存储格式并没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),而且主要影响性能的因素是数据行使用的存储总量,由于char平均占用的空间多于varchar,所以除了简短并且固定长度的,其他考虑varchar。这样节省空间,对磁盘I/O和数据存储总量比较好。

6.2 TEXT类型

在MySQL中,TEXT用来保存文本类型的字符串,总共包含4种类型,分别为TINYTEXT、TEXT、 MEDIUMTEXT 和 LONGTEXT 类型。

在向TEXT类型的字段保存和查询数据时,系统自动按照实际长度存储,不需要预先定义长度。这一点和VARCHAR类型相同。

每种TEXT类型保存的数据长度和所占用的存储空间不同,如下:

类型 特点 长度 长度范围 占用的存储空间
TINYTEXT 小文本、可变长度 L 0 <= L <= 255 L + 2 个字节
TEXT 文本、可变长度 L 0 <= L <= 65535 L + 2 个字节
MEDIUMTEXT 中等文本、可变长度 L 0 <= L <= 16777215 L + 3 个字节
LONGTEXT 大文本、可变长度 L 0 <= L <= 4GB L + 4 个字节
  • 由于实际存储的长度不确定,MySQL不允许TEXT类型的字段做主键。遇到这种情况,你只能采用CHAR(M),或者 VARCHAR(M)
  • 跟VARCHAR一样,在保存和查询数据时,不会删除数据尾部的空格

6.2.1 使用TEXT类型的经验

  • TEXT文本类型,可以存比较大的文本段,搜索速度稍慢,因此如果不是特别大的内容,建议使用CHAR, VARCHAR来代替
  • 还有TEXT类型不用加默认值,加了也没用
  • 而且text和blob类型的数据删除后容易导致“空洞”,使得文件碎片比较多,所以频繁使用的表不建议包含TEXT类型字段,建议单独分出去,单独用一个表

6.3 ENUM类型

枚举类型

ENUM类型的取值范围需要在定义字段时进行指定

范围 占用的存储空间
1 <= L <= 65535 1或2个字节
  • 当ENUM类型包含1~255个成员时,需要1个字节的存储空间;
  • 当ENUM类型包含256~65535个成员时,需要2个字节的存储空间。
  • ENUM类型的成员个数的上限为65535个。

6.3.1 使用

CREATE TABLE test_enum( 
    season ENUM("春","夏","秋","冬","unknow") 
);

INSERT INTO test_enum VALUES("春"),("秋"); 

# 忽略大小写 
INSERT INTO test_enum VALUES("UNKNOW"); 

# 允许按照角标的方式获取指定索引位置的枚举值 
INSERT INTO test_enum VALUES("1"),(3); 

# Data truncated for column "season" at row 1 
INSERT INTO test_enum VALUES("ab"); 

# 当ENUM类型的字段没有声明为NOT NULL时,插入NULL也是有效的 
INSERT INTO test_enum VALUES(NULL);

小结

在定义数据类型时,如果确定是 整数 ,就用 INT ; 如果是 小数 ,一定用定点数类型DECIMAL(M,D) ; 如果是日期与时间,就用 DATETIME

阿里巴巴《Java开发手册》之MySQL数据库:

  • 任何字段如果为非负数,必须是 UNSIGNED
  • 【 强制 】小数类型为 DECIMAL,禁止使用 FLOAT 和 DOUBLE。
    • 说明:在存储的时候,FLOAT 和 DOUBLE 都存在精度损失的问题,很可能在比较值的时候,得到不正确的结果。如果存储的数据范围超过 DECIMAL 的范围,建议将数据拆成整数和小数并分开存储。
  • 【 强制 】如果存储的字符串长度几乎相等,使用 CHAR 定长字符串类型。
  • 【 强制 】VARCHAR 是可变长字符串,不预先分配存储空间,长度不要超过 5000。如果存储长度大于此值,定义字段类型为 TEXT,独立出来一张表,用主键来对应,避免影响其它字段索引效率。

原文地址:https://www.cnblogs.com/xnmk-zhan/archive/2022/03/11/15993602.html

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL常用数据类型及细节

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL常用数据类型及细节

MySQL的数据类型类型类型举例整数类型TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT浮点类型FLOAT、DOUBLE定点数类型DECIMAL位类型BIT日期时间类型YEAR、TIME、DATE、DATETIME
MySQL常用数据类型及细节
2019-06-18

快速掌握MySQL常用数据类型:常见数据类型及其应用场景一览

MySQL是一种常用的关系型数据库管理系统,它提供了多种数据类型来存储不同类型的数据。在使用MySQL进行数据库设计和开发时,了解常见的数据类型及其应用场景非常重要。本文将介绍MySQL常用的数据类型,并提供一些具体的代码示例,以帮助读者更
快速掌握MySQL常用数据类型:常见数据类型及其应用场景一览
2024-01-29

深入理解MySQL数据类型:探索基本数据类型的细节和限制

MySQL是一种功能强大的关系型数据库管理系统(RDBMS),被广泛应用于各种类型的应用程序中。在MySQL中,数据类型是非常重要的概念之一。不同的数据类型在存储和处理数据时具有不同的特点和限制。本文将深入探讨MySQL中的各种基本数据类型
深入理解MySQL数据类型:探索基本数据类型的细节和限制
2024-01-29

MySQL中常用的数据类型

在写sql语句的时候,数据类型是避不可少的一个环节,以下是我在学习的过程中总结的数据类型,仅供参考:数值类型 类型有符号(signed)范围无符号(unsigned)范围描述tinyint(-128,127)(0,255)小整数值smallint(-32768
MySQL中常用的数据类型
2021-06-28

三种常用的MySQL 数据类型

MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 数值类型MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER
2022-05-25

Python数据类型指南:掌握常见数据类型及其运用

Python是一种简单而强大的编程语言,广泛用于数据分析和科学计算。要成功使用Python进行数据分析,了解不同的数据类型及其应用至关重要。本文将介绍常用的Python数据类型,并提供具体的代码示例。数字类型(Numbers):Pytho
Python数据类型指南:掌握常见数据类型及其运用
2024-01-20

MySQL数据库常见的数据类型

MySQL提供的数据类型包括数值类型(整数类型和小数类型)、字符串类型、日期类型、复合类型(复合类型包括enum类型和set类型)以及二进制类型 。1,整数类型:整数类型的数,默认情况下既可以表示正整数又可以表示负整数(此时称为有符号数)。如果只希望表示零和正
MySQL数据库常见的数据类型
2020-08-20

MySQL数据库:注释及数据类型

注释# 单行注释-- 单行注释(注意:两个但横线后面必须加空格)数据类型1.整形​ tinyint、smallint、mediumint、int、bigint​ 小整数值 大整数值 大整数值 大整数值 极大整数值2.浮点型​ float、d
2015-03-21

MySql常用数据类型与操作详解

目录常用数据类型数据库基本操作约束类型常用数据类型1、int:整形2、double(m,d)decimal(m,d):浮点数类型 (m指定长度,d表示小数点位数)3、varchar(size):字符串类型4、timestamp:日
2022-07-28

Python数据类型及常用方法是什么

这篇文章主要讲解了“Python数据类型及常用方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python数据类型及常用方法是什么”吧!一 引入我们学习变量是为了让计算机能够像人一样
2023-06-30

Redis的五大数据类型及常用命令

一、与数据库相关的命令Redis启动后默认16个数据库,类似数组下表从零开始,初始默认使用零号库切换数据库命令 select 数据库下标查看当前数据库的key的数量 Dbsize清空当前库 flushdb清空所有库 flushall二、与键相关的常用命令查看所
Redis的五大数据类型及常用命令
2015-10-09

python-常见数据类型及其方法

1.None: 表示空(无任何功能,专门用于提供空值)2.整形(int)3.布尔类型(bool) 只有两个结果:True/False: 0/''/[]/()/{}/set() 转布尔时为False,其余结果都为T
2023-01-31

Python常用的数据类型

Python常用的数据类型有很多,今天暂时介绍这三种,int(整数类型)、str(字符串)、bool(布尔类型)一.int(整数类型)1.不带小数的,integer 的缩写,常用于数据的计算或者大小的比较2. a = 4 #整数 p
2023-01-30

编程热搜

目录