12月阅读周·MySQL数据库入门:数据库入门之数据类型篇

举报
叶一一 发表于 2024/12/25 09:26:46 2024/12/25
【摘要】 背景去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。没有计划的阅读,收效甚微。新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。这个“玩法”虽然常见且板正,但是有效,已经坚持阅读十一个月。已读完书籍:《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScr...

背景

去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。

没有计划的阅读,收效甚微。

新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。

这个“玩法”虽然常见且板正,但是有效,已经坚持阅读十一个月。

已读完书籍《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScript(中卷)》、《你不知道的JavaScript(下卷)》、《数据结构与算法JavaScript描述》、《WebKit技术内幕》、《前端架构:从入门到微前端》、《秒懂算法:用常识解读数据结构与算法》、《JavaScript权威指南》、《JavaScript异步编程设计快速响应的网络应用》、《编写可测试的JavaScript代码

当前阅读周书籍MySQL数据库入门

数据类型

整数类型

在MySQL数据库中,经常需要存储整数数值。根据数值取值范围的不同,MySQL中的整数类型可分为5种,分别是TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。

不同整数类型所占用的字节数和取值范围都是不同的。其中,占用字节数最小的是TINYINT,占用字节数最大的是BIGINT。需要注意的是,不同整数类型的取值范围可以根据字节数计算出来,例如,TINYINT类型的整数占用1个字节,1个字节是8位,那么,TINYINT类型无符号数的最大值就是2^8-1,即255,TINYINT类型有符号数的最大值就是2^7-1,即127。同理,可以算出其他不同整数类型的取值范围。

浮点数类型和定点数类型

在MySQL数据库中,存储的小数都是使用浮点数和定点数来表示的。浮点数的类型有两种,分别是单精度浮点数类型(FLOAT)和双精度浮点数类型(DOUBLE)。而定点数类型只有DECIMAL类型。

DECIMAL类型的取值范围与DOUBLE类型相同。需要注意的是,DECIMAL类型的有效取值范围是由M和D决定的,其中,M表示的是数据的长度,D表示的是小数点后的长度。比如,将数据类型为DECIMAL(6,2)的数据3.1415插入数据库后,显示的结果为3.14。

日期与时间类型

为了方便在数据库中存储日期和时间,MySQL提供了表示日期和时间的数据类型,分别是YEAR、DATE、TIME、DATETIME和TIMESTAMP。

每种日期和时间类型的取值范围都是不同的。需要注意的是,如果插入的数值不合法,系统会自动将对应的零值插入数据库中。

YEAR类型

YEAR类型用于表示年份,在MySQL中,可以使用以下三种格式指定YEAR类型的值。

(1)使用4位字符串或数字表示,范围为'1901'~'2155'或1901~2155。例如,输入'2014'或2014,插入到数据库中的值均为2014。

(2)使用两位字符串表示,范围为'00'~'99',其中,'00'~'69'范围的值会被转换为2000~2069范围的YEAR值,'70'~'99'范围的值会被转换为1970~1999范围的YEAR值。例如,输入'14',插入到数据库中的值为2014。

(3)使用两位数字表示,范围为1~99,其中,1~69范围的值会被转换为2001~2069范围的YEAR值,70~99范围的值会被转换为1970~1999范围的YEAR值。例如,输入14,插入到数据库中的值为2014。

需要注意的是,当使用YEAR类型时,一定要区分'0'和0。因为字符串格式的'0'表示的YEAR值是2000,而数字格式的0表示的YEAR值是0000。

DATE类型

DATE类型用于表示日期值,不包含时间部分。在MySQL中,可以使用以下4种格式指定DATE类型的值。

(1)以'YYYY-MM-DD'或者'YYYYMMDD'字符串格式表示。

例如,输入'2014-01-21'或'20140121',插入数据库中的日期都为2014-01-21。

(2)以'YY-MM-DD'或者'YYMMDD'字符串格式表示。YY表示的是年,范围为'00'~'99',其中'00'~'69'范围的值会被转换为2000~2069范围的值,'70'~'99'范围的值会被转换为1970~1999范围的值。

例如,输入'14-01-21'或'140121',插入数据库中的日期都为2014-01-21。

(3)以YY-MM-DD或者YYMMDD数字格式表示。

例如,输入14-01-21或140121,插入数据库中的日期都为2014-01-21。

(4)使用CURRENT_DATE或者NOW()表示当前系统日期。

TIME类型

TIME类型用于表示时间值,它的显示形式一般为HH:MM:SS,其中,HH表示小时,MM表示分,SS表示秒。在MySQL中,可以使用以下三种格式指定TIME类型的值。

(1)以'D HH:MM:SS'字符串格式表示。其中,D表示日,可以取0~34之间的值,插入数据时,小时的值等于(D×24+HH)。

例如,输入'2 11:30:50',插入数据库中的日期为59:30:50。

(2)以'HHMMSS'字符串格式或者HHMMSS数字格式表示。

例如,输入'345454'或345454,插入数据库中的日期为34:54:54。

(3)使用CURRENT_TIME或NOW()输入当前系统时间。

DATETIME类型

DATETIME类型用于表示日期和时间,它的显示形式为'YYYY-MM-DD HH:MM:SS',其中,YYYY表示年,MM表示月,DD表示日,HH表示小时,MM表示分,SS表示秒。在MySQL中,可以使用以下4种格式指定DATETIME类型的值。

(1)以'YYYY-MM-DD HH:MM:SS'或者'YYYYMMDDHHMMSS'字符串格式表示的日期和时间,取值范围为'1000-01-01 00:00:00'~'9999-12-3 23:59:59'。

例如,输入'2014-01-22 09:01:23'或20140122090123,插入数据库中的DATETIME值都为2014-01-22 09:01:23。

(2)以'YY-MM-DD HH:MM:SS'或者'YYMMDDHHMMSS'字符串格式表示的日期和时间,其中YY表示年,取值范围为'00'~'99'。与DATE类型中的YY相同,'00'~'69'范围的值会被转换为2000~2069范围的值,'70'~'99'范围的值会被转换为1970~1999范围的值。

(3)以YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式表示的日期和时间。

例如,插入20140122090123或者140122090123,插入数据库中的DATETIME值都为2014-01-22 09:01:23。

(4)使用NOW来输入当前系统的日期和时间。

TIMESTAMP类型

TIMESTAMP类型用于表示日期和时间,它的显示形式与DATETIME相同,但取值范围比DATETIME小。下面介绍几种TIMESTAMP类型与DATATIME类型不同的形式,具体如下。

(1)使用CURRENT_TIMESTAMP来输入系统当前日期和时间。

(2)输入NULL时,系统会输入系统当前日期和时间。

(3)无任何输入时,系统会输入系统当前日期和时间。

字符串和二进制类型

为了存储字符串、图片和声音等数据,MySQL提供了字符串和二进制类型。

不同数据类型具有不同的特点,接下来,针对这些数据类型进行详细的讲解,具体如下。

1.CHAR和VARCHAR类型

CHAR和VARCHAR类型都用来表示字符串数据,不同的是,VARCHAR可以存储可变长度的字符串。在MySQL中,定义CHAR和VARCHAR类型的方式如下所示:

CHAR(M) 或 VARCHAR(M)

在上述定义方式中,M指的是字符串的最大长度。为了帮助读者更好地理解CHAR和VARCHAR之间的区别,下面以CHAR(4)和VARCHAR(4)为例进行说明。

当数据为CHAR(4)类型时,不管插入值的长度是多少,所占用的存储空间都是4个字节。而VARCHAR(4)所对应的数据所占用的字节数为实际长度加1。

BINARY和VARBINARY类型

BINARY和VARBINARY类型类似于CHAR和VARCHAR,不同的是,它们所表示的是二进制数据。定义BINARY和VARBINARY类型的方式如下所示:

BINARY(M) 或 VARBINARY(M)

在上述格式中,M指的是二进制数据的最大字节长度。

需要注意的是,BINARY类型的长度是固定的,如果数据的长度不足最大长度,将在数据的后面用“\0”补齐,最终达到指定长度。例如,指定数据类型为BINARY(3),当插入a时,实际存储的数据为“a\0\0”,当插入ab时,实际存储的数据为“ab\0”。

TEXT类型

TEXT类型用于表示大文本数据,例如,文章内容、评论等,它的类型分为4种,TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT。

BLOB类型

BLOB类型是一种特殊的二进制类型,它用于表示数据量很大的二进制数据,例如图片、PDF文档等。BLOB类型分为四种,TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。

需要注意的是,BLOB类型与TEXT类型很相似,但BLOB类型数据是根据二进制编码进行比较和排序,而TEXT类型数据是根据文本模式进行比较和排序。

ENUM类型

ENUM类型又称为枚举类型,定义ENUM类型的数据格式如下所示:

ENUM('值1', '值2', '值3',…,'值n')

在上述格式中,('值1', '值2','值3',…,'值n')称为枚举列表,ENUM类型的数据只能从枚举列表中取,并且只能取一个。需要注意的是,枚举列表中的每个值都有一个顺序编号,MySQL中存入的就是这个顺序编号,而不是列表中的值。

SET类型

SET类型用于表示字符串对象,它的值可以有零个或多个,SET类型数据的定义格式与ENUM类型类似,具体语法格式如下所示:

SET('值1', '值2', '值3',…,'值n')

与ENUM类型相同,('值1', '值2', '值3',…,'值n')列表中的每个值都有一个顺序编号,MySQL中存入的也是这个顺序编号,而不是列表中的值。

BIT类型

BIT类型用于表示二进制数据。定义BIT类型的基本语法格式如下所示:

BIT(M)

在上述格式中,M用于表示每个值的位数,范围为1~64。需要注意的是,如果分配的BIT(M)类型的数据长度小于M,将在数据的左边用0补齐。例如,为BIT(6)分配值b‘101’的效果与分配b‘000101’相同。

总结

使用MySQL数据库存储数据时,不同的数据类型决定了MySQL存储数据方式的不同。为此,MySQL数据库提供了多种数据类型,其中包括整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型和二进制类型。


作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。