首页 数据库 mysql教程 MySQL—MySQL数据库支持的数据类型_MySQL

MySQL—MySQL数据库支持的数据类型_MySQL

Jun 01, 2016 pm 01:08 PM

         在数据库中,数据类型对于设计数据库者来说十分重要,记得在一次数据库大会上,某前辈说了这么一句话:“如果是我面试DBA,我第一个问题就是关于tinyint、smallint、mediumint、int、bigint的区别,如果这些不能详细解释,后面不管他表现的多好,我不会考虑”,从这里可以理解掉MySQL的数据类型是多么重要,很多人特别是开发人员往往不会关注这方面,从理解上大家会任务数据库对内存等方面要求很高,这些数据类型并不是很重要,其实他忽略了一个关键的因素,磁盘IO,如果数据类型设置的不合理,会占用很大的磁盘空间,会给数据带来IO上得瓶颈,下面我们就详细的学习下MySQL支持的数据类型

 

1:数值类型

整数类型

字节

最小值

最大值

TINYINT

1

有符号-128

无符号0

有符号127

无符号255

SMLLINT

2

有符号-32768

无符号0

有符号32767

无符号65535

MEDIUMINT

3

有符号-8388608

无符号0

有符号8388607

无符号16777215

INT、INTEGER

4

有符号-2147483748

无符号0

有符号2147483747

无符号4294967295

BIGINT

8

有符号-9223372036854775808

无符号0

有符号9223372036854775807

无符号18446744073709551615

 

浮点数类型

字节

最小值

最大值

FLOAT

4

+_1.17549435-38

+_3.402823466E+38

DOUBLE

8

+_2.225073858507204E-308

+_1.7976931348623157E+308

 

在整数类型着中,按照取值范围和存储方式不同,分为tinyint、smallint、 mediumint、int、bigint这5个类型,如果超出类型范围的操纵,会发生“out of range”错误提示。为了避免此类问题发生,在选择数据类型时要根据应用的实际请客确定其取值范围,最后根据确定的结果慎重选择数据类型

 

所有的整数类型都有一个可选属性UNSIGNED(无符号),如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,他的取值范围是正常值的下限取0,上限取原值的2倍

另外,整数类型还有一个属性,AUTO_IMCREMENT。在需要产生唯一标示符或顺序值时,可利用此属性,这个属性只用于整数类型,AUTO_INCREMENT值一般从1开始,每行加1

 

2:日期时间类型

MySQL中友很多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异,下表列出5.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

 

上述类型,除了TIMESTAMP外都容易理解,下面我们就TIMESTAMP和DATETIME进行对比

1:TIMESTAMP支持的时间范围小,其取值范围从19700101080001到2038年的某个时刻,而DATETIME是从1000-01-01 00:00:00到9999-12-31 23:59:59,范围更大

2:表中的第一个TIMESTAMP列自动设置为系统时间,如果在一个TIMESTAMP中插入NULL,则该列赋值将自动设置为当前的日期和时间,再插入或者更新一行但不明确给TIMESTAMP列赋值时也会子偶那个设置该列的当前的时间和日期,当插入的值超出取值范围,MySQL认为该值溢出,使用“0000-00-00 00:00:00”进行填补

3:TIMESTAMP的插入和查询都受当地时区的影响,更能反应出实际的日期。而DATETIME则只能反应出插入时当地的时区,其他时区的人查看数据必然会受到影响

4:TIMESTAMP的属性受MySQL版本和服务器SQLMode的影响很大

 

 

3:字符串类型

MySQL提供了很多种对字符数据的存储类型,下表就详细进行了对比

字符串类型

字节

描述及存储需求

CHAR(M)

M

M为0~255之间的整数

VARCHAR(M)

 

M为0~65535之间的整数,值的长度+1个字节

TINYBLOB

 

允许长度0~255字节,值的长度+1个字节

BLOB

 

允许长度0~65535字节,值的长度+2个字节

MEDIUMBLOB

 

允许长度0~167772150,值的长度+3个字节

LONGBLOB

 

允许长度0~4294967395,值的长度+4个字节

TINYTEXT

 

允许长度0~255,值的长度+2个字节

TEXT

 

允许长度0~65535字节,值的长度+2个字节

MEDIUMTEXT

 

允许长度0~167772150,值的长度+3个字节

LONGTEXT

 

允许长度0~4294967395,值的长度+4个字节

VARBINARY( M)

 

允许长度0~M个字节的变长字符串,值的长度+1个字节

BINARY(M)

M

允许长度0~M个字节的变长字符串

 

 CHAR和VARCHAR类型
CHAR和VARCHAR很类似,都用来保存MySQL中较短的字符串,二者的主要区别在于存储方式的不同,CHAR列的长度固定为创建表时的长度,长度可以为从0~255任何值。而VARCHAR列中的值为可变长字符串,长度可以为指定的0~255或者65535之间的值。在检索的时候,CHAR列删除了尾部的空格,而VARCHAR保留了这些空格。会造成索引存储大小上的变化,所以在设置这个类型的时候一定要慎重,充分分析现有业务
BINARY和VARBINARY类型
BINARY和VARBINARY类似于CHAR和VARCHAR,不同的是它们包含二进制串而不包含非二进制字符串。
TEXT和BOLB类型
这2种主要用于存储一些大字段类似于图片等,慎用……

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用Alter Table语句在MySQL中更改表? 如何使用Alter Table语句在MySQL中更改表? Mar 19, 2025 pm 03:51 PM

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

如何为MySQL连接配置SSL/TLS加密? 如何为MySQL连接配置SSL/TLS加密? Mar 18, 2025 pm 12:01 PM

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

您如何处理MySQL中的大型数据集? 您如何处理MySQL中的大型数据集? Mar 21, 2025 pm 12:15 PM

文章讨论了处理MySQL中大型数据集的策略,包括分区,碎片,索引和查询优化。

哪些流行的MySQL GUI工具(例如MySQL Workbench,PhpMyAdmin)是什么? 哪些流行的MySQL GUI工具(例如MySQL Workbench,PhpMyAdmin)是什么? Mar 21, 2025 pm 06:28 PM

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]

如何使用Drop Table语句将表放入MySQL中? 如何使用Drop Table语句将表放入MySQL中? Mar 19, 2025 pm 03:52 PM

本文讨论了使用Drop Table语句在MySQL中放下表,并强调了预防措施和风险。它强调,没有备份,该动作是不可逆转的,详细介绍了恢复方法和潜在的生产环境危害。

您如何用外国钥匙代表关系? 您如何用外国钥匙代表关系? Mar 19, 2025 pm 03:48 PM

文章讨论了使用外国密钥来代表数据库中的关系,重点是最佳实践,数据完整性和避免的常见陷阱。

如何在JSON列上创建索引? 如何在JSON列上创建索引? Mar 21, 2025 pm 12:13 PM

本文讨论了在PostgreSQL,MySQL和MongoDB等各个数据库中的JSON列上创建索引,以增强查询性能。它解释了索引特定的JSON路径的语法和好处,并列出了支持的数据库系统。

如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)? 如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)? Mar 18, 2025 pm 12:00 PM

文章讨论了使用准备好的语句,输入验证和强密码策略确保针对SQL注入和蛮力攻击的MySQL。(159个字符)

See all articles