mysql支持的字段类型_MySQL支持的数据类型

cbc90a23319204e1be62da0cef1fb2a5.png

整形类型

整型类型中,按照取值范围和存储方式不同,分为tinyint,smallint,mediumint,int和bigInt这五个类型。如果超出类型范围的操作,会发生”Out of range”错误提示。

对于整型数据,MySQL还支持在类型后面的小括号内指定显示宽度,例如int(5)表示当数值宽度小于5位的时候在数字前面填满宽度,如果不显示指定宽度则默认为int(11)。一般配合zerofill使用,顾名思义,zerofill就是用”0”填充的意思,也就是在数字位数不够的空间用“0”填满。

8d630c468f880101b821aad448117f72.png

在id1和id2中都插入数值1,可以发现格式没有异常:

bbb1a756f946dd12c58a08fe55d6e1d5.png

分别修改id1和id2的字段类型,加入zerofill约束

0237a8687007a7efb79b064a0c184361.png

再查看表

5ceb31a0d38ce58bcb6ca5d078b82992.png

可以发现,在数值前面用字符“0”填充了剩余的宽度。

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

9040c87ccb0e8ad4ccb90125afc59664.png

id2中显示了正确的数值,并没有受宽度限制影响

整数类型有一个属性:AUTO_INCREMENT。在需要产生唯一标识符或顺序值时,可利用此属性,这个属性只用于整数类型。AUTO_INCREMENT值一般从1开始,每行增加1。在插入NULL到一个AUTO_INCREMENT列时,MySQL插入一个比该列中当前最大值大1的值。一个表中最多只能有一个AUTO_INCREMENT,对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL,并定义为PRIMARY KEY或定义为UNIQUE键。

可按下列任何一种方式定义AUTO_INCREMENT列:

34611fa31927fecfa1793d6c60e560a3.png

72c5a1f13b32473040f20894e881984d.png

浮点型

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

定点数和浮点数都可以用类型名称后加“(M,D)”的方式来进行表示,“(M,D)”表示该值一共显示M位数字(整数位+小数位),其中D位位于小数点后面,M和D又称为精度和标度。例如,定义为float(7,4)的一个列可以显示为-999.9999。MySQL保存值时进行四舍五入,因此如果在float(7,4)列内插入999.00009,近似结果是999.0001.值得注意的是,浮点数后面跟“(M,D)”的用法是非标准用法,如果要用于数据库的迁移,则最好不要这么使用。float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示,而decimal在不指定精度时,默认的整数位为10,默认的小数位为0。

下面通过体格例子来比较float,double和decimal三者之间的不同。

(1)创建测试表,分别将id1,id2,id3字段设置为float(5,2),double(5,2),decimal(5,2);

d7320afc2c308bc8f00d2b83d460c5a7.png

向id1和id2字段中插入数据1.234,而id3字段中仍然插入1.23

43ae8cbf1022ba06cb9d8bee4ef167f0.png

可以发现,id1,id2,id3都插入了表t1,但是id1和id2由于标度的限制,四舍五入舍去了最后一位,数据变为了1.23

再来看看这个例子,都插入1.235测试看看是否MySQL对数值进行了四舍五入的处理

a0a053e3b211f96a04f8a132f231706b.png

将id1,id2,id3字段的精度和标度全部去掉,再次插入数据1.23

c40e7ab177734d82889b26985dd38ce0.png

可以发现id1,id2字段中可以正常插入数据,而id3字段的小数位被截断。

如果浮点数不写精度和标度,则会按照实际精度值显示,如果有精度和标度,则会自动将四舍五入的结果插入,系统不会报错,定点数如果不写精度和标度,则按照默认值decimal(10,0)来进行操作,并且如果数据超越了精度和标度值,系统则阶段数据

插入id3时,系统给出的警告,id3这一列的数据被截断

79873602a3bbd69422cfed8903a1eee6.png

进制类型

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

创建一张表

c4600cfdb38ac60ae8221af3ab8ed7f8.png

插入数据和查看数据,可以发现select * 的结果为null

0172856b32964ce90c92eda97aef96f0.png

改用BIN()或者HEX()函数可以正常显示值

b63be28a66e748eff8e0d8436b743244.png

数据插入bit类型字段时,首先转换为二进制,如果位数允许,将成功插入,如果位数小于实际定义的位数,则插入失败,下面我们在t2表插入数字2,2的二进制码是“10”,而id2的定义是bit(1),将无法插入

9109d122d96ec89d57f09b0009e4dd36.png

将id2类型修改为bit(2)后,重新插入,插入成功

551075dd2ae38d90e78fb95a487abfae.png

日期时间类型

MySQL中有多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异。

这些数据类型的主要区别如下。

如果要用来表示年月日,通常用DATE来表示。

如果要用来表示年月日时分秒,通常用DATETIME表示

如果只用来表示时分秒,通常用TIME来表示。

8a3bf2505d6a3ddf54fd7790d77e9659.png

如果需要经常插入或者更新日期为当前系统时间,则通常使用TIMESTAMP来表示。TIMESTAMP值返回后显示为“YYYY-MM-DD HH:MM:SS”格式的字符串,显示宽度固定为19个字符,如果想要获得数字值,应在TIMESTAMP列添加+“0”。

如果只是表示年份,可以用YEAR来表示,它比DATE占用更少的空间。

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

9caad83b546e8a395c4cdbedfa65a155.png

创建一张表,用now()函数插入当前日期:

904d418c23aff167ce899516e326ab94.png

再创建一张测试表 ,字段为TIMESTAMP类型,

可以发现,系统给id自动创建了默认值CURRENT_TIMESTAMP(系统日期)

7092f1c6c210b672aa22ea6cec3a8423.png

插入一个NULL值试试:

d61f8826a2962a30e7c1d09ea537fcb1.png

可以发现id正确插入了系统的日期。

注意:MySQL只给表中的一个TIMESTAMP字段设置默认值为系统日期,如果要为第二个字段设置TIMESTAMP,则系统会报错(MySQL5.7版本)

3686ab048d7229c114e916f814b27d0a.png

TIMESTAMP还有一个重要特点,就是和时区相关,当插入日期时,会先转换为本地时区后存放;而从数据库里面取出时,也同样需要将日期转换为本地时区后显示。这样,两个时区的用户看到的同一日期可能是不一样的。

日期类型的插入格式有很多,看下图

eacf0d18d9e7244658f61aa95c02153d.png

做一个测试,来说明如何采用不同的格式将日期“2018-01-17 10:16:20”插入到DATETIME列中。

f350fc95d5a0d4374bf09d0230a4d321.png

字符串类型

MySQL中提供了多种对字符数据的存储类型,不同的版本可能有所差异。MySQL包括了CHAR,VARCHAR,BINARY,VARBINARY,BLOB,TEXT,ENUM和SET等多种字符串类型

c01e3e510848862618f3f0008a959d10.png

CHAR和VARCHAR类型

CHAR和VARCHAR很类似,都用来保存MySQL中较短的字符串,二者的主要区别在于存储方式的不同:CHAR列的长度固定为创建表时生命的长度,长度可以为从0~255的任何值,而VARCHAR列中的值为可变长字符串,0~65535之间的值。在检索的时候,CHAR列删除了尾部的空格,而VARCHAR则保留这些空格。

创建测试表vc,并定义两个字段“v VARCHAR(4)”和“c CHAR(4)”:

8af2b14b1a80191a2114fc1e7cff4b93.png

同时插入字符串“ab ”

80c151b41fedc230e48e94b87f39487c.png

显示查询结果

3f9f0215066d328bfa713463ebe27ce7.png

可以发现,CHAR列最后的空格在操作时都已经被删除了,而VARCHAR依然保留空格。

再来做一个测试,如果插入的值超出了类型的范围

bcfd8232d4153b57c1a5ce32d92d45a7.png

那么将会报错

CHAR和VARCHAR的区别

CHAR(M)定义的列的长度为固定的,M取值可以为0~255之间,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检 索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义 char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充。

VARCHAR(M)定义的列的长度为可变长字符串,M取值可以为0~65535之间,(VARCHAR的最大有效长度由最大行大小和使用 的字符集确定。整体最大长度是65,532字节)。VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则 使用两个字节)。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。varchar存储变长数据,但存储效率没有 CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么”+1″呢?这一个字节用于保存实际使用了多大的长度。 从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

CHAR和VARCHAR最大的不同就是一个是固定长度,一个是可变长度。由于是可变长度,因此实际存储的时候是实际字符串再加上一个记录 字符串长度的字节(如果超过255则需要两个字节)。如果分配给CHAR或VARCHAR列的值超过列的最大长度,则对值进行裁剪以使其适合。如果被裁掉 的字符是空格,则会产生一条警告。如果裁剪非空格字符,则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值