返回顶部
首页 > 资讯 > 数据库 >MySQL 5.7常见数据类型
  • 598
分享到

MySQL 5.7常见数据类型

2024-04-02 19:04:59 598人浏览 安东尼
摘要

——《深入浅出Mysql(第二版)》笔记 数值类型 整数类型 字节 最小值

——《深入浅出Mysql(第二版)》笔记

数值类型

整数类型 字节 最小值 最大值
TINYINT 1 有符号 -128;无符号 0 有符号 127;无符号 255
SMALLINT 2 有符号 -2^16;无符号 0 有符号 2^16-1;无符号 2^17-1
MEDIUMINT 3 有符号 -2^24;无符号 0 有符号 2^24-1;无符号 2^25-1
INT\INTEGER 4 有符号 -2^32;无符号 0 有符号 2^32-1;无符号 2^33-1
BIGINT 8 有符号 -2^64;无符号 0 有符号 2^64-1;无符号 2^65-1

浮点类型 字节 最大值 最小值
FLOAT 4
DOUBLE 8

定点数类型 字节 描述
DEC(M,D)\DECIMAL(M,D) M+2 最大值取值范围与DOUBLE相同,给定DECIMAL的有效取值范围由M和D决定

位类型 字节 最小值 最大值
BIT(M) 1~8 BIT(1) BIT(8)

整数类型

对于整数类型,mysql支持在类型名称后面使用(n)的方式指定显示宽度,例如int(5)表示当数值宽度小于5位时,在数字前面填满宽度,如果不显示指定宽度则默认为int(11)。一般配合zerofill使用,就是用'0'填充。

示例:


--创建表t1,有id1和id2两个字段,指定数值宽度分别为int和int(5)
mysql> create table t1 (id1 int,id2 int(5));
mysql> desc t1;


--在id1和id2中都插入数值1
mysql> insert into t1 values (1,1);
mysql> select * from t1;


--分别给id1和id2字段增加zerofill参数
mysql> alter table t1 modify id1 int zerofill;
mysql> alter table t1 modify id2 int(5) zerofill;

设置了宽度限制后,如果插入大于宽度限制的值,不会对插入的数据有任何影响,还是按照类型的书记精度进行保存。这时,宽度格式实际已经没有意义,左边不会再填充任何的“0”字符。


--向表t1的id1中插入1,id2中插入12345678
mysql> insert into t1 values(1,12345678);
mysql> select * from t1;

所有的整数类型都有一个可选属性UNSIGNED(无符号),如果需要在字段里面保存非负数或者需要较大的上限值,可以用此选项。而当一个列指定为zerofill,则MySQL自动为该列添加UNSIGNED属性。

另外,整数类型还有一个独有的AUTO_INCREMENT属性,表示该列的值是自增型。AUTO_INCREMENT值一般从1开始,每行增加1。在插入NULL到一个AUTO_INCREMENT列时,MySQL插入一个比该列当前最大值大1的值。一个表中最多只能有一个列是AUTO_INCREMENT的。

对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL,并定义为UNIQUE。

浮点类型

对于小数的表示,MySQL分为浮点数和定点数两种。浮点数包括float(单精度)和double(双精度),而定点数只有decimal一种。定点数在MySQL内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。

浮点数和定点数都可以用类型名称后加"(M,D)"的方式来进行表示,"(M,D)"表示该值一共显示M位,小数有D位。MySQL保存浮点值时对超出位采用的是四舍五入的方式。因此如果在float(5,3)中插入123.006,则保存的值为123.01。float和double在不指定精度时,默认按照实际硬件和操作系统来决定;而decimal不指定时,默认整数位为10,小数位为0。

示例:


--创建表tf,分别将id1,id2,id3字段设置为float(5,2),double(5,2),decimal(5,2)
mysql> create table tf( id1 float(5,2),id2 double(5,2),id3 decimal(5,2));


--向表中三个字段分别插入数据1.23
mysql> insert into tf values(1.23,1.23,1.23);


--向表中分别插入数据1234.005
mysql> insert into tf values(1234.005,1234.005,1234.005);


--向表中分别插入数据123.005
mysql> insert into tf values(123.005,123.005,123.005);


--向表中分别插入数据123.006,123.006,123.004
mysql> insert into tf values(123.006,123.006,123.004);


--去掉表tf字段的精度,并重新插入1.23
mysql> alter table tf modify id1 float;
mysql> alter table tf modify id2 double;
mysql> alter table tf modify id3 decimal;
mysql> insert into tf values(1.23,1.23,1.23);
mysql> desc tf;


--向表中分别插入1.234567123321,1.234567123321123321,1.23234233
mysql> insert into tf values(1.234567123321,1.234567123321123321,1.23234233);

位类型

对于BIT类型,用于存放位字段值,BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写,默认为1位。而直接使用SELECT命令不会看到查询结果,需使用bin()(显示为二进制)函数或者hex()(显示为16进制)函数进行读取。

示例:


--创建表tb,定义字段id1为bit(1),id2字段为bit
mysql> create table tb(id1 bit(1),id2 bit);


--向tb中插入1,1
mysql> insert into tb values(1,1);
mysql> select * from tb;
mysql> select bin(id1),hex(id2) from tb;

数据插入bit两类型字段时,首先转换为二进制,如果位数允许,则成功插入;如果位数超出定义的位数,则插入失败。

时间类型

MySQL中由多种数据类型可以用于日期和时间的表示,下表是MySQL5.0中所有支持的日期和时间类型。

日期和时间类型 字节 最小值 最大值
DATE 4 1000-01-01 9999-12-31
DATETIME 8 1000-01-01 00:00:00 9999-12-31 23:59:59
TIMESTAMP 4 19700101080001 2038年某个时刻
TIME 3 -838:59:59 838:59:59
YEAR 1 1901 2155

每种时间类型都有一个有效范围,如果超出这个范围,在默认的SQLMode下,系统会进行错误提示,并将以零值来进行存储。

数据类型

零值表示DATE0000-00-00DATETIME0000-00-00 00:00:00TIMESTAMP00000000000000TIME00:00:00YEAR0000


--创建表tdt
mysql> create table tdt(dt date, dttm datetime, tms timestamp,tm time,yr year);


--使用now()函数向表中插入当前时间
mysql> insert into tdt values(now(),now(),now(),now(),now() );


--向tms中插入NULL,MySQL会自动赋值系统时间
mysql> insert into tdt(tms) values(null);

MySQL只会给表中第一个TIMESTAMP字段赋值系统时间,如果有其他的,则赋值为0值。


--修改表tdt,增加TIMESTAMP类型的tms1列,并给tms,tms1赋值null
mysql> alter table tdt add tms1 timestamp;
mysql> desc tdt;
mysql> insert into tdt(tms,tms1) values(null,null);

TIMESTAMP有一个重要特点,就是和失去相关。当插入提起时,会先转换为本地时区后存放;而从数据库取出时,需要将日期转换为本地时区后显示。


--创建表tdt1,包含字段tms,dt
mysql> create table tdt1(tms timestamp,dt datetime);


--查看当前时区,并向表tdt1中插入系统时间
mysql> show variables like 'time_zone';
mysql> insert into tdt1 values(now(),now());

可以发现,时区的值为SYSTEM,这个值默认是和主机的时区一致的,因为处在中国,这里实际是东八区(+8:00)。


--修改时区为东九区,再次查看tdt1中的时间
mysql> set time_zone='+9:00';

字符串类型

MySQL中提供了多种对字符串数据的存储类型,不同版本有所差异。以5.0为例,MySQL包括了CHARVARCHARBINARYVARBINARYBLOBTEXTENUMSET等多种。

数据类型 描述即存储
CHAR(M) M为0~255之间的整数
VARCHAR(M) M为0~65535之间的整数,值的长度+1个字节
TINYBLOB 允许长度0~255字节,值的长度+1个字节
BLOB 允许长度0~65535字节,值的长度+2个字节
MEDIUMBLOB 允许长度0~167772150字节,值的长度+3个字节
LONGBLOB 允许长度0~4294967295字节,值的长度+4个字节
TINYTEXT 允许长度0~255字节,值的长度+1个字节
TEXT 允许长度0~65535字节,值的长度+2个字节
MEDIUMTEXT 允许长度0~167772150字节,值的长度+3个字节
LONGTEXT 允许长度0~4294967295字节,值的长度+4个字节
VARBINARY(M) 允许长度0~M个字节的变长字节字符串,值的长度+1个字节
BINARY(M) 允许长度0~M个字节的定长字节字符串

方法

CHAR和VARCHAR

两者很类似,都用来保存MySQL中较短的字符串。二者主要区别在于存储方式的不同:CHAR列的长度固定为创建表时声明的长度;而VARCHAR列中的值为可变长字符串。在检索时,CHAR会删除尾部的空格,而VARCHAR不会。


--创建表tc,包含两个字段ch(char(6))和vc(varchar(6))
mysql> create table tc (ch char(6),vc varchar(6));
--向ch和vc字段插入'abc   '
mysql> insert into tc values('abc   ','abc   ');
--查询字段长度
mysql> select length(ch),length(vc) from tc;

BINARY和VARBINARY

类似于CHAR和VARCHAR,不同的是它们存储的是二进制的字符串。


--创建表tbc,包含字段bc(binary(6))、vbc(varbinary(6))
mysql> create table tbc (bc binary(6),vbc varbinary(6));
--向表中插入数据('a  ','a  ')
mysql> insert into tbc values('a  ','a  ');
--查看字段值长度
mysql> select length(bc),length(vbc) from tbc;

当保存BINARY值时,MySQL通过在值的最后填充0x00(零字节)以达到指定的字段定义长度。


--通过hex()函数查看tbc中数据的保存
mysql> select length(bc),length(vbc) from tbc;

ENUM类型

枚举类型,它的值范围需要在创建表时通过枚举方式显示指定,对1255个成员的枚举,需要1个字节存储;对于25665535个成员,需要2个字节存储。最多允许有65535个成员。


--创建表te,包含字段f1(enum('a','b','c'))
mysql> create table te(f1 enum('a','b','c'));
--向表中插入几条记录
mysql> insert into te values('a'),('B'),('3'),(null);

ENUM是忽略大小写的。还支持使用下标(从1开始,下标越界时报错)的方式插入数据。特殊值'0'表示一个空值。

SET类型

SET和ENUM非常类似,也是一个字符串对象,里面可以包含0~64个成员。根据成员个数不同,存储也有所不同。

1~8个成员的集合,占1个字节

9~16个成员的集合,占2个字节

17~24个成员的集合,占3个字节

25~32个成员的集合,占4个字节

32~64个成员的集合,占8个字节

而且,SET类型一次可以选择多个成员。


--创建表ts,包含字段f1(set())
mysql> create table ts (f1 set('a','b','c','d'));
mysql> insert into ts values('a,b'),('a,d'),('b,c,d');


--向表中插入数据('a,b,a,c,d,d')
mysql> insert into ts values('a,b,a,c,d,d');

SET类型可以从允许值集合中选择任意个元素进行组合,所以对于输入的值只要在允许值的组合范围内,都可以正确的记录到SET类型的列中。对于超出允许范围的值,报错。而有重复成员的集合,将自动去重。

到此这篇关于MySQL 5.7常见数据类型的文章就介绍到这了,更多相关MySQL数据类型内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 5.7常见数据类型

本文链接: https://lsjlt.com/news/130548.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL 5.7常见数据类型
    ——《深入浅出MySQL(第二版)》笔记 数值类型 整数类型 字节 最小值 ...
    99+
    2024-04-02
  • MySQL数据库常见的数据类型
    MySQL提供的数据类型包括数值类型(整数类型和小数类型)、字符串类型、日期类型、复合类型(复合类型包括enum类型和set类型)以及二进制类型 。 1,整数类型: 整数类型的数,默认情况下既可以表示正整数又可以表示负整数(此时...
    99+
    2020-08-20
    MySQL数据库常见的数据类型
  • mysql常见数据类型 - 自律即自由
    1 #常见的数据类型 2 17 18 #一、整型 19 31 32 #1.如何设置无符号和有符号 33 34 DROP TABLE IF EXISTS tab_int; 35 CREAT...
    99+
    2015-02-21
    mysql常见数据类型 - 自律即自由
  • mysql中常见的数据类型有哪些?
    mysql 提供多种数据类型来存储不同类型的数据,包括整数类型、浮点数类型、定点类型、字符类型、时间和日期类型以及其他类型。这些数据类型具有不同的特性和用途,用于满足不同数据的存储需求。...
    99+
    2024-04-26
    mysql
  • mysql 常见锁类型
    表锁 & 行锁 在 MySQL 中锁的种类有很多,但是最基本的还是表锁和行锁:表锁指的是对一整张表加锁,一般是 DDL 处理时使用,也可以自己在 SQL 中指定;而行锁指的是锁定某一行数据或某几行,或行和行之间的间隙。行锁的加锁方法比较复...
    99+
    2023-09-24
    mysql 数据库
  • 常见的MySQL锁类型
    MySQL 中常见的锁类型,需要具体代码示例导言:在数据库中,当多个客户端同时对同一数据进行读取或修改时,会出现并发操作的问题。为了保证数据的一致性和完整性,数据库引擎采用了锁机制来控制对共享数据的访问。MySQL 作为一种常用的关系型数据...
    99+
    2023-12-21
    - 行锁 - 读锁 (共享锁) - 写锁 (排他锁)
  • 快速掌握MySQL常用数据类型:常见数据类型及其应用场景一览
    MySQL是一种常用的关系型数据库管理系统,它提供了多种数据类型来存储不同类型的数据。在使用MySQL进行数据库设计和开发时,了解常见的数据类型及其应用场景非常重要。本文将介绍MySQL常用的数据类型,并提供一些具体的代码示例,...
    99+
    2024-01-29
    MySQL数据类型 常用数据类型 数据类型应用场景
  • 常见Flex数据类型有哪些
    这篇文章主要介绍常见Flex数据类型有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Flex数据类型说明基元数据类型包括Boolean、int、Null、Number、String、uint和void。Actio...
    99+
    2023-06-17
  • 【数据类型】C#和Sql Server、Mysql、Oracle等常见数据库的数据类型对应关系
    🏆🏆这是小5写的第二篇城市领跑者文章,一起为所在城市领跑助力吧! 🏆🏆在实际项目中,不管是用C#后端编程语言也好,还是Java后端编...
    99+
    2023-09-01
    数据库 c# mssql mysql oracle
  • python-常见数据类型及其方法
    1.None: 表示空(无任何功能,专门用于提供空值) 2.整形(int) 3.布尔类型(bool) 只有两个结果:True/False: 0/''/[]/()/{}/set() 转布尔时为Fals...
    99+
    2023-01-31
    数据类型 常见 方法
  • PHP 中有哪些常见数据类型?
    PHP 是一门非常流行的编程语言,它被广泛应用于 Web 开发领域。在 PHP 中,数据类型是非常重要的概念,它们决定了我们能够处理的数据的种类和方式。在本文中,我们将介绍 PHP 中常见的数据类型,以及它们的特点和使用方法。 整数类型 ...
    99+
    2023-07-04
    数据类型 spring apache
  • c#常见的数据类型有哪些
    c# 数据类型分为两种:值类型和引用类型。值类型直接存储数据,包括整型、浮点数、字符、布尔型和枚举。引用类型存储对堆中对象的引用,包括类、结构、数组、字符串、异常和接口。根据存储大小、性...
    99+
    2024-04-04
    c# 内存占用
  • php中常见数据类型有哪些
    php 支持多种数据类型,包括基础类型(整数、浮点数、字符串、布尔值)、复合类型(数组、对象)和特殊类型(空值、资源)。通过类型强制转换或隐式类型转换,可以轻松地在不同数据类型之间进行转...
    99+
    2024-04-27
    隐式类型转换
  • Python数据类型指南:掌握常见数据类型及其运用
    Python是一种简单而强大的编程语言,广泛用于数据分析和科学计算。要成功使用Python进行数据分析,了解不同的数据类型及其应用至关重要。本文将介绍常用的Python数据类型,并提供具体的代码示例。 数字类型(Numbers)...
    99+
    2024-01-20
    Python 应用 数据类型
  • SQL Server中有哪些常见数据类型
    这篇文章给大家介绍SQL Server中有哪些常见数据类型,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、 整数数据类型整数数据类型是最常用的数据类型之一。1、INT (INTEGE...
    99+
    2024-04-02
  • Redis安装启动及常见数据类型
    Redis 简介 Redis 是我们在互联网应用中使用最广泛的一个 NoSQL 数据库,基于 C 开发的键值对存储数据库。 Redis 这个名字是 Remote Dictionary...
    99+
    2024-04-02
  • 初识Java一些常见的数据类型
    目录1、Java是什么2、为什么总有人说Java是最好的语言3、一个简单的main函数4、运行Java程序5、Java书写 注意问题6、数据类型与运算符6.1变量和类型6.2 整型变...
    99+
    2024-04-02
  • Java常见知识点汇总(①)——数据类型
    一. Java中的数据类型变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 因此,通过定义不同类型的变量,可以在内存中储存整数、小数...
    99+
    2023-06-05
  • MariaDB支持哪些常见的数据类型
    MariaDB支持的常见数据类型包括: 整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 浮点...
    99+
    2024-04-09
    MariaDB
  • MySQL中常用的数据类型
    在写sql语句的时候,数据类型是避不可少的一个环节,以下是我在学习的过程中总结的数据类型,仅供参考: 数值类型   类型 有符号(signed)范围 无符号(unsigned)范围 描述 tinyint (-128,127)...
    99+
    2021-06-28
    MySQL中常用的数据类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作