首页 > 数据库 >MYSQL数据类型

MYSQL数据类型

时间:2022-09-26 16:23:20浏览次数:52  
标签:存储 varchar 字节 数据类型 MYSQL 长度

MYSQL数据类型介绍

一、MYSQL的数据类型

主要包括五大类:

整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、INT、BIG INT

浮点类型:FLOAT、DOUBLE、DECIMAL

字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOA

日期类型:Date、DateTime、TimeStamp、Time、Year、

其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等

1、 整形

MYSQL数据类型 含义(有符号)
tiny(m) 1个字节 范围(-128-127)
small(m) 2个字节 范围(-32768-32767)
mediumint(m) 3个字节 范围(-8388608~8388607)
int(m) 4个字节 范围(-2147483648~2147483647)
bigint(m) 8个字节 范围(+-9.22*10的18次方)

取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。

1、整数型的数值类型已经限制了取值范围,有符号整型和无符号整型都有,而M值并不代表可以存储的数值字符长度,它代表的是数据在显示时显示的最小长度;

2、当存储的字符长度超过M值时,没有任何的影响,只要不超过数值类型限制的范围;

3、当存储的字符长度小于M值时,只有在设置了zerofill用0来填充,才能够看到效果,换句话就是说,没有zerofill,M值就是无用的。

2、 浮点型

MYSQL数据类型 含义
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d) 双精度浮点型 16位精度(8字节) m总个数,d小数位
设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。整数部分最大是3位,如果插入数12.123456,存储的是12.1234,如果插入12.12,存储的是12.1200.

3、 定点数
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。
4、 字符串

MYSQL数据类型 含义
char(n) 固定长度,最多255个字符
varchar(n) 固定长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-1个字符
longtext 可变长度,最多2的32次方-1个字符
char和varchar:

1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。

2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),

所以varchar(4),存入3个字符将占用4个字节。

3.char类型的字符串检索速度要比varchar类型的快。
varchar和text:

1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字

节。

2.text类型不能有默认值。

3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。
6、 日期时间类型

MYSQL数据类型 含义
date 日期 '2008-12-2'
time 时间 '12:25:36'
datetime 日期时间 '2008-12-2 22:06:44'
timestamp 自动存储记录修改时间
若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。
数据类型的属性
MYSQL数据类型 含义
---- ----
NULL 数据列可包含NULL值
NOT NULL 数据列不允许包含NULL值
DEFAULT 默认值
PRIMARY KEY 主键
AUTO_INCREMENT 无符号
CHARACTER SET name 指定一个字符集
COMMENT 添加注释

二、MYSQL数据类型的长度和范围

各数据类型及字节长度一览表:

数据类型 字节长度 范围或用法
Bit 1 无符号[0,255],有符号[-128,127],天缘博客备注:BIT和BOOL布尔型都占用1字节
TinyInt 1 整数[0,255]
SmallInt 2 无符号[0,65535],有符号[-32768,32767]
MediumInt 3 无符号[0,224-1],有符号[-223,2^23-1]]
Int 4 无符号[0,232-1],有符号[-231,2^31-1]
MediumInt 3 无符号[0,224-1],有符号[-223,2^23-1]]
Int 4 无符号[0,232-1],有符号[-231,2^31-1]
BigInt 8 无符号[0,264-1],有符号[-263 ,2^63 -1]
Float(M,D) 4 单精度浮点数。天缘博客提醒这里的D是精度,如果D<=24则为默认的FLOAT,如果D>24则会自动被转换为DOUBLE型。
Double(M,D) 8 双精度浮点。
Decimal(M,D) M+1或M+2 未打包的浮点数,用法类似于FLOAT和DOUBLE,天缘博客提醒您如果在ASP中使用到Decimal数据类型,直接从数据库读出来的Decimal可能需要先转换成Float或Double类型后再进行运算。
Date 3 以YYYY-MM-DD的格式显示,比如:2009-07-19
Date Time 8 以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30
TimeStamp 4 以YYYY-MM-DD的格式显示,比如:2009-07-19
Time 3 以HH:MM:SS的格式显示。比如:11:22:30
Year 1 以YYYY的格式显示。比如:2009
Char(M) M 定长字符串。
VarChar(M) M 变长字符串,要求M<=255
Binary(M) M 类似Char的二进制存储,特点是插入定长不足补0
VarBinary(M) Max:255 大小写不敏感
Text Max:64K 大小写不敏感
Medium Text Max:16M 大小写不敏感
Long Text Max:4G 大小写不敏感
TinyBlob Max:255 大小写不敏感
Blob Max:64K 大小写不敏感
MediumBlob Max:16M 大小写不敏感
LongBlob Max:4G 大小写不敏感
Enum 1或2 最大可达65535个不同的枚举值
Set 可达8 最大可达64个不同的值

三、使用建议

1、在指定数据类型的时候一般是采用从小原则,比如能用TINY INT的最好就不用INT,能用FLOAT类型的就不用DOUBLE类型,这样会对MYSQL在运行效率上提高很大,尤其是大数据量测试条件下。

2、不需要把数据表设计的太过复杂,功能模块上区分或许对于后期的维护更为方便,慎重出现大杂烩数据表

3、数据表和字段的起名字也是一门学问

4、设计数据表结构之前请先想象一下是你的房间,或许结果会更加合理、高效

5、数据库的最后设计结果一定是效率和可扩展性的折中,偏向任何一方都是欠妥的

选择数据类型的基本原则

前提:使用适合存储引擎。

选择原则:根据选定的存储引擎,确定如何选择合适的数据类型。

下面的选择方法按存储引擎分类:

MyISAM 数据存储引擎和数据列:MyISAM数据表,最好使用固定长度(CHAR)的数据列代替可变长度(VARCHAR)的数据列。
MEMORY存储引擎和数据列:MEMORY数据表目前都使用固定长度的数据行存储,因此无论使用CHAR或VARCHAR列都没有关系。两者都是作为CHAR类型处理的。
InnoDB 存储引擎和数据列:建议使用 VARCHAR类型。

对于InnoDB数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度的CHAR列不一定比使用可变长度VARCHAR列简单。因而,主要的性能因素是数据行使用的存储总量。由于CHAR平均占用的空间多于VARCHAR,因 此使用VARCHAR来最小化需要处理的数据行的存储总量和磁盘I/O是比较好的。

下面说一下固定长度数据列与可变长度的数据列。

char与varchar

CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

下面的表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别:

CHAR(4) 存储需求 VARCHAR(4) 存储需求
'' ' ' 4个字节 '' 1个字节
'ab' 'ab ' 4个字节 'ab ' 3个字节
'abcd' 'abcd' 4个字节 'abcd' 5个字节
'abcdefgh' 'abcd' 4个字节] 'abcd' 5个字节

标签:存储,varchar,字节,数据类型,MYSQL,长度
From: https://www.cnblogs.com/mamihlap/p/16726701.html

相关文章

  • SpringBoot+Vue体育场管理系统 体育场预约系统 体育场教练预约系统Java Vue MySQL数据
    ......
  • 数据类型,bool,tuple,set,用户交互,格式化输出,运算符
    基本数据类型之布尔值bool1.用来判断事物的对错是否可行只要用于流程控制中2.只有两种状态True对的真的可行的False错的假的不可行的3.python中所有......
  • python入门第四课--数据类型、格式化输出、基本符号的意义
    今日内容概要作业讲解python基本数据类型与用户交互格式化输出基本运算符多种赋值方式逻辑运算符成员运算符身份运算符流程控制理论今日内容详细作业讲......
  • Mysql原理学习
    存储引擎数据库引擎是数据库用于存储、处理和保护数据的核心服务,不同的数据库引擎有其各自的特点,如存储机制、索引技巧、主键的处理、锁的粒度等特点便随着引擎的不同而变......
  • STS用Maven写一个登录页面 - 用MySQL验证登录用户
    上一章我们已经将MySQL和STS的连接进行了测试,下面我们就用MySQL验证登录用户是否正确。可参考:https://www.cnblogs.com/smart-zihan/p/15041013.html第一步:建立数据库接......
  • MySQL索引相关的问题
    关系型数据库相关的大部分问题,都要往如何减少IO次数以及如何减少随机IO次数上想,这也是关系数据库设计时考虑的一个目标。为什么索引使用B+树实际上不管你使用什么结构,B......
  • Mysql---数据类型
    数据类型概述  charactersetname:创建数据库时createdatabasedbtest characterset'utf8';创建数据库未指明......
  • 知识点 1: MySQL的回表
    1:聚簇索引和非聚簇索引是什么?MySQL的索引有不同的角度的分类方式,例如:按数据结构分、按逻辑角度分、按物理存储分其中,按物理存储分有两种索引:聚簇索引和非聚簇索引。 ......
  • 常见的数据库软件介绍和MySql的安装
    常见的数据库软件介绍MySQL:开源免费的数据库,小型的数据库,已经被Oracle收购了,MySQL6.x版本也开始收费Oracle:收费的大型数据库,Oracle公司的产品,Oracle收购SUN公司,收购MYSQL......
  • MySQL学习(4)---MySQL索引
    ps:没有特殊说明,此随笔中默认采用innoDB存储引擎中的索引,且索引都是指B+树(多路平衡搜索树)结构组织的索引。其中聚集索引、复合索引、前缀索引、唯一索引默认都是使用B+树,统......