MySQL学习(2)---MySQL数据类型
ps:此随笔基于mysql 5.7.*版本。
补充:
- UNSIGNED:所有整数类型都可以有一个可选(非标准)UNSIGNED属性。无符号类型可用于在列中仅允许非负数存在,或者当开发者需要该列的较大数值范围时。例如,如果一个INT类型的列使用UNSIGNED属性,则该列范围的大小相同,但其端点向上移动,从-2147483648~2147483647到0~4294967295。浮点和定点类型也可以使用UNSIGNED属性。与整数类型一样,此属性可防止将负值存储在列中。与整数类型不同,列值的上限保持不变。
- ZEROFILL:当数值显示宽度比定义的列指定的宽度小时,空格的默认填充将替换为0,即会在数值前面自动进行补0操作。如果ZEROFILL为数字列所指定,MySQL会自动为该列添加UNSIGNED属性。
以test表为例,演示效果。
id字段具有ZEROFILL属性时,创建的test表如下:
添加数据并查询该表,可以发现id字段不足指定宽度的值左侧全部被0填充。
修改该表,去掉id字段的ZEROFILL属性,再次进行查询。
注意:对于表达式或查询具有ZEROFILL属性的列,该属性将被忽略。如果将大于显示宽度的值存储在具有具有ZEROFILL属性的整数列中,当MySQL为某些复杂的连接生成临时表时,可能会出现问题。
数值数据类型
整数类型(精确值)
MySQL支持SQL标准整数类型INTEGER(或INT)和SMALLINT。作为标准的扩展,MySQL还支持整数类型TINYINT、MEDIUMINT和 BIGINT。下表显示了每种整数类型所需的存储空间和范围。
类型 | 存储所需字节 | 最小值(带符号) | 最大值(带符号) | 最小值(无符号) | 最大值(无符号) |
---|---|---|---|---|---|
TINYINT | 1 | -128 | 127 | 0 | 255 |
SMALLINT | 2 | -32768 | 32767 | 0 | 65535 |
MEDIUMINT | 3 | -8388608 | 8388607 | 0 | 16777215 |
INT | 4 | -2147483648 | 2147483647 | 0 | 4294967295 |
BIGINT | 8 | -9223372036854775808 | -9223372036854775807 | 0 | 18446744073709551615 |
- TINYINT
格式:TINYINT[(M)] [UNSIGNED] [ZEROFILL]
一个非常小的整数。有符号范围-128~127。无符号范围是0~255。
- SMALLINT
格式:SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
一个小整数。有符号范围-32768~32767。无符号范围是0~65535。
- MEDIUMINT
格式:MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
一个中等大小的整数。有符号范围-8388608~8388607。无符号范围是0~16777215。
- INT(等同于INTEGER)
格式:INT[(M)] [UNSIGNED] [ZEROFILL]
一个正常大小的整数。有符号范围-2147483648~2147483647。无符号范围是0~4294967295。
- BIGINT
格式:BIGINT[(M)] [UNSIGNED] [ZEROFILL]
一个大整数。有符号范围-9223372036854775808~9223372036854775807。无符号范围是0~18446744073709551615。
定点类型(精确值)
DECIMAL和NUMERIC类型存储精确的数字数据值。当需要的精度很重要时使用这些类型,例如货币数据。在MySQL中,NUMERIC被实现为DECIMAL,所以以下关于DECIMAL的语法同样适用于NUMERIC。下表显示了每种定点类型所需的存储空间。此处暂不列出范围。
类型 | 存储所需字节 |
---|---|
DECIMAL | 不定长(长度可变) |
NUMERIC | 不定长(长度可变) |
- DECIMAL
格式:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
一个压缩的”精确”定点数。M是总位数(精度),M的范围为1~65。D是小数点后的位数(小数位数),D的范围为0~30。小数点(".")和负数符号("-")不计入M。如果D为0,则值没有小数点或小数部分。最大位数(M)为65。支持的最大小数位数(D)为30。如果D省略,则默认为0。如果M被省略,默认值为10。
注意:如果指定UNISIGNED,则不允许负值。所有带有列的基本计算 ("+","-","*","/"),DECIMAL都以65位的精度完成
浮点类型(近似值)
FLOAT和DOUBLE类型表示近似数值数据值。下表显示了每种浮点类型所需的存储空间。此处暂不列出范围。
类型 | 存储所需字节 |
---|---|
FLOAT | 4 |
DOUBLE | 8 |
- FLOAT
格式1:FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
一个小的(单精度)浮点数。允许的值为-3.402823466E+38~-1.175494351E-38、0和1.175494351E-38~3.402823466E+38。这些是基于 IEEE标准的理论限制。根据不同的硬件或操作系统,实际范围可能会稍小一些。FLOAT(M,D)是一个非标准的MySQL扩展。M是总位数,D是小数点后的位数。如果省略M和D,则将值存储在硬件允许的范围内。单精度浮点数精确到大约7位小数。
注意:如果指定UNISIGNED,则不允许负值。同时,使用FLOAT可能会导致一些意想不到的问题,因为MySQL中的所有计算都是以双精度完成的。
格式2:FLOAT[(P)] [UNSIGNED] [ZEROFILL]
一个浮点数。p表示以位为单位的精度,但MySQL仅使用此值来确定是使用FLOAT还是DOUBLE用于生成的数据类型。如果p是从0到24,则数据类型变为FLOAT无M或D值。如果p是从25到53,则数据类型变为DOUBLE无M或D值。结果的范围与一般的单精度FLOAT或双精度数据类型相同。
- DOUBLE
格式:DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
一个正常大小(双精度)的浮点数。允许的值为-1.7976931348623157E+308~-2.2250738585072014E-308、0和2.2250738585072014E-308~1.7976931348623157E+308。这些是基于IEEE标准的理论限制。根据不同的硬件或操作系统,实际范围可能会稍小一些。DOUBLE(M,D)是一个非标准的MySQL扩展。
注意:如果指定UNISIGNED,则不允许负值。
位值类型
BIT数据类型用于存储位值。这种类型允许存储位值。
- BIT
格式:BIT[(M)] [UNSIGNED] [ZEROFILL]
位值类型。M表示每个值的位数,从1到64。如果M省略,则默认为1。
日期和时间数据类型
DATE、DATETIME和TIMESTAMP类型
- DATE
格式:DATE
日期类型。支持的范围为"1000-01-01"到"9999-12-31"。MySQL以"YYYY-MM-DD"格式显示日期值,但允许使用字符串或数字将值分配给日期列。
- DATETIME
格式:DATETIME[(fsp)]
日期和时间的组合。支持的范围是"1000-01-01 00:00:00.000000"到"9999-12-31 23:59:59.99999"。MySQL以"YYYY-MM-DD hh:MM:ss[.fraction]"格式显示日期时间值,但允许使用字符串或数字将值分配给日期时间列。可以给出0~6范围内的可选fsp值,用来指定小数秒精度。值为0表示不存在小数部分。如果省略,则默认精度为0。
- TIMESTAMP
格式:TIMESTAMP[(fsp)]
时间戳。范围为"1970-01-01 00:00:01.000000"UTC到"2038-01-19 03:14:07.9999"UTC。时间戳值存储为自历元(1970-01-01 00:00:00 UTC)以来的秒数。时间戳不能表示值"1970-01-01 00:00:00",因为这相当于从纪元开始的0秒,而值0保留用于表示"0000-00-00 00:00-00",即“零”时间戳值。可以给出0~6范围内的可选fsp值,用来指定小数秒精度。值为0表示不存在小数部分。如果省略,则默认精度为0。
时间类型
MySQL以"hh:mm:ss"格式检索和显示时间值(对于大的小时值,则以"hhh:mm:ss"形式)。时间值的范围可以从"-838:59:59"到"838:59:59"。小时部分可能大一些或小一些,因为时间类型不仅可用于表示一天中的时间(必须小于24小时),还可用于表示两个事件之间的经过时间或时间间隔(可能远大于24小时,甚至为负)。
格式:TIME[(fsp)]
一段时间。范围为"-838:59:59.000000”到“838:59:59.00000"。MySQL以"hh:mm:ss[.fraction]"格式显示时间值,但允许使用字符串或数字将值分配给时间列。可以给出0~6范围内的可选fsp值,以指定小数秒精度。值为0表示不存在小数部分。如果省略,则默认精度为0。
年份类型
该YEAR类型是用于表示年份值的1字节类型。可以将其声明为YEAR具有4个字符的隐式显示宽度,或者等效地声明为YEAR(4)具有显式显示宽度。
格式:YEAR[(4)]
4位格式的年份。MySQL以YYYY格式显示年份值,但允许使用字符串或数字将值分配给年份列。值显示为1901~2155或是0000。此外,YEAR(2)数据类型已被弃用,MySQL 5.7.5版本中已删除对它的支持。
字符串数据类型
CHAR和VARCHAR类型
- CHAR
格式:[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
一个固定长度的字符串,在存储时总是用空格右填充到指定的长度。M表示以字符为单位的列长度。M的范围是0~255。如果M省略,则长度为1。
注意:除非启用严格的SQL模式,CHAR否则检索值时将删除尾随空格。
- VARCHAR
格式:[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]
一个可变长度的字符串。M表示最大列长度(以字符为单位),且范围是0~65535。VARCHAR的有效最大长度取决于最大行大小(65535字节,在所有列中共享)和所使用的字符集。例如,utf8字符每个字符最多需要三个字节,因此使用utf8字符串集的VARCHAR列最多可以声明为21844个字符。
注意:MySQL遵循标准SQL规范,并且不会从VARCHAR值中删除尾随空格。
BINARY和VARBINARY类型
- BINARY
格式:BINARY[(M)]
该BINARY类型与CHAR类型类似,但存储的是二进制字节字符串而不是非二进制字符串。可选长度M表示以字节为单位的列长度。如果省略,M则默认为1。
- VARBINARY
格式:VARBINARY(M)
该VARBINARY类型与VARCHAR类型类似,但存储的是二进制字节字符串而不是非二进制字符串。M表示以字节为单位的最大列长度。
BLOB和TEXT类型
- BLOB
BLOB是一个二进制大对象,可以保存可变数量的数据。四种BLOB类型是TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。
格式:BLOB[(M)]
最大长度为65535(216−1)字节。每个BLOB值使用2字节长度前缀存储,该前缀指示值中的字节数。对于这种类型,可以给出可选长度M。如果这样做了,MySQL会将列创建为最小的BLOB类型,该类型足够大,可以容纳M字节长的值。其他同类型如TINYBLOB、MEDIUMBLOB和LONGBLOB与之类似。
- TEXT
这四种文本类型是TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。它们对应于四种BLOB类型,具有相同的最大长度和存储要求
格式:TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
TEXT最大长度为65535 (216−1)个字符的列。如果值包含多字节字符,则有效最大长度较小。每个文本值使用2字节长度的前缀存储,该前缀指示值中的字节数。对于这种类型,可以给出可选长度M。如果这样做了,MySQL会将列创建为最小的文本类型,其大小足以容纳M个字符长的值。其他同类型如TINYTEXT、MEDIUMTEXT和LONGTEXT与之类似。
枚举类型
ENUM是一个字符串对象,其值选自创建表时列规范中明确枚举的允许值列表。
- ENUM
格式:ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]
一个枚举。只能有一个值的字符串对象,从值列表"value1"、"value2"、"NULL"或特殊的错误值中选择。枚举值在内部表示为整数。一个ENUM列最多可以有65535个不同的元素(实际限制小于3000)。
SET类型
SET是一个字符串对象,可以有零个或多个值,每个值都必须从创建表时指定的允许值列表中选择。 SET包含多个集合成员的列值使用逗号","分隔的成员指定。这样做的结果是SET成员值本身不应包含逗号。
格式:SET('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]
一个集合。一个字符串对象,可以有零个或多个值,每个值必须从值列表"value1"、"value2"中选择。集合值在内部表示为整数。
注:部分内容参考自MySQL官方手册。地址:https://dev.mysql.com/doc/refman/5.7/en/
MySQL学习(2)---MySQL数据类型的更多相关文章
- MySQL学习笔记-MySQL体系结构总览
MySQL体系结构总览 不管是用哪种数据库,了解数据库的体系结构都是极为重要的.MySQL体系结构主要由数据库和数据库实例构成. 数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件 ...
- MySQL学习(4)---MySQL索引
ps:没有特殊说明,此随笔中默认采用innoDB存储引擎中的索引,且索引都是指B+树(多路平衡搜索树)结构组织的索引.其中聚集索引.复合索引.前缀索引.唯一索引默认都是使用B+树,统称为索引. 索引概 ...
- 我的MYSQL学习心得 mysql的权限管理
这一篇<我的MYSQL学习心得(十三)>将会讲解MYSQL的用户管理 在mysql数据库中,有mysql_install_db脚本初始化权限表,存储权限的表有: 1.user表 2.db表 ...
- 我的MYSQL学习心得 mysql日志
这一篇<我的MYSQL学习心得(十五)>将会讲解MYSQL的日志 MYSQL里的日志主要分为4类,使用这些日志文件,可以查看MYSQL内部发生的事情. 分别是 1.错误日志:记录mysql ...
- MySQL学习11 - MySQL创建用户和授权
权限管理 权限管理 我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作.包括select.update.delete.update.grant等操作.那么一般情况在公司之后DBA工程师 ...
- MySQL学习笔记——MySQL启动过程(一)
首先去官网或者github下载MySQL5.7的源码. 官网地址:https://dev.mysql.com/downloads/mysql/ github地址:https://github.com/ ...
- MySQL学习(3)---MySQL常用命令
ps:此随笔基于mysql 5.7.*版本. 准备 net start mysql 启动MySQL服务 net stop mysql 关闭MySQL服务 mysql [-h<IP地址>] ...
- MySQL学习(1)---MySQL概述
什么是数据库 概述 数据库(Database)是长期存储在计算机内有组织.大量.共享的数据集合.它可以供各种用户共享,具有最小冗余度和较高的数据独立性.数据库管理系统DBMS(Database Man ...
- MySQL学习笔记之数据类型
数据类型在所有的数据库使用当中,都是避免不了的部分.以前每次写SQL语句,对于定义成哪种数据类型总是迷迷糊糊,今天就来彻底弄清.以下介绍仅针对MySQL 5.5以上版本. 一.字符串类型 1.char ...
- mysql学习1:数据类型:数字型,日期和时间,字符串类型(总结)
mysql数据类型:数字型,日期和时间,字符串类型 摘要 MySQL中定义数据字段的类型对数据库的优化是非常重要的: MySQL支持多种类型,大致可以分为三类,如下. 数字类型 整数:tinyint. ...
随机推荐
- 11 MySQL_分组查询和关联查询
分组查询 group by 将某个字段的相同值分为一组,对其他字段的数据进行聚合函数的统计,称为分组查询 单字段分组查询 1.查询每个部门的平均工资 select dept_id,avg(sal) f ...
- ooday01类_对象_访问成员
笔记: 什么是类?什么是对象? 现实生活中是由很多很多对象组成的,基于对象抽出了类 对象:软件中真实存在的单个个体/东西 类:类别/类型,代表一类个体 类是对象的模子,对象是类的具体的实例 类中可以包 ...
- Kubernetes v1.24 基于containerd部署
k8s每个节点安装containerd. containerd安装参考<containerd安装博文>:https://www.cnblogs.com/punchlinux/p/1 ...
- 痞子衡嵌入式:MCUXpresso IDE下将源码制作成Lib库方法及其与IAR,MDK差异
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下将源码制作成Lib库方法及其与IAR,MDK差异. 程序函数库是一个包含已经编译好代码和数据的函数集合,这 ...
- 关于 CMS 垃圾回收器,你真的懂了吗?
大家好,我是树哥. 前段时间有个小伙伴去面试,被问到了 CMS 垃圾回收器的详细内容,没答出来.实际上,CMS 垃圾回收器是回收器历史上很重要的一个节点,其开启了 GC 回收器关注 GC 停顿时间的历 ...
- 在阿里云Centos7.6上面配置Mysql主从数据库(master/slave),实现读写分离
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_85 在之前的一篇文章中,阐述了如何在高并发高负载的场景下使用nginx做后台服务的负载均衡:在阿里云Centos上配置nginx+ ...
- CentOS Docker安装 && docker 基础指令
1 # 直接从官网下载docker的安装命令包(docker已经很贴心将安装shell脚本帮我们准备好了) 2 curl -fsSL get.docker.com -o get-docker.sh 3 ...
- ShadeRec类定义
这个类主要是用于记录碰撞数据的类,书中已经说的很清楚了.这个类之后会慢慢扩展,会在本随笔中扩展,先定义简单的,方便编译看看效果. 类声明(World是之后主程序中的类,最后测试时再实现): #ifnd ...
- BTDetect用户协议和技术支持
1.巴蜀生物科技检测用户协议 2.基于机器学习的生物检测项目 3.BTDetect用户手册和技术支持
- MySQL数据库授权的两种方式
方法一:grant命令创建用户并授权(针对只修改权限) grant命令简单语法如下: grant all privileges on dbname.* to username@localhost id ...