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. ...
随机推荐
- P2183 [国家集训队]【一本通提高组合数学】礼物
[国家集训队]礼物 题目背景 一年一度的圣诞节快要来到了.每年的圣诞节小 E 都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小 E 心目中的重要性不同,在小 E 心中分量越重的人,收到的礼物会 ...
- TFrecord写入与读取
Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializi ...
- DDL_操作数据库_创建&查询和DDL_操作数据库_修改&删除&使用
DDL操作数据库.表 1.操作数据库:CRUD C(Create):创建 创建数据库: create database 数据库名称: 创建数据库判断不存在再创建 create database if ...
- python sphinx(文档生成器)入门
简介 Sphinx 是一个 文档生成器 ,您也可以把它看成一种工具,它可以将一组纯文本源文件转换成各种输出格式,并且自动生成交叉引用.索引等.也就是说,如果您的目录包含一堆 reStructuredT ...
- python 执行需要管理员权限的命令(Windows)
由于Windows存在管理员权限限制,执行需管理员权限的命令时会出错, 有两种方案, 1.采用python调用vbs文件,vbs调用bat文件 2.采用提供弹出用户管理员权限方式让用户确认 1.采用p ...
- MYSQL常见可优化场景
1.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null 可以在num上设置 ...
- linux常见命令(十)
cut/grep/sort/uniq/wc 连续执行多个命令--;进入/data新建data01目录,在data01目录新建test.txtcd /data;mkdir data01;cd data0 ...
- 『叶问』#41,三节点的MGR集群,有两个节点宕机后还能正常工作吗
『叶问』#41,三节点的MGR集群,有两个节点宕机后还能正常工作吗 每周学点MGR知识. 1. 三节点的MGR集群,有两个节点宕机后还能正常工作吗 要看具体是哪种情况. 如果两个节点是正常关闭的话,则 ...
- PureRandom采样类定义和测试
此是随机采样算法,效果感觉一般般. 类声明: #pragma once #ifndef __PURERANDOM_HEADER__ #define __PURERANDOM_HEADER__ #inc ...
- 关于python如何引用excel文件
关于python如何引用excel文件 import pandas as pd #引用pandas库,as:将pandas简写为pd Nowcoder = pd.read_excel("1. ...