当前位置: 首页 > news >正文

MySQL:mysql的数据类型

MySQL 作为一个流行的关系型数据库管理系统,支持多种数据类型以满足不同的数据处理和存储需求。正确理解和使用这些数据类型对于提高数据库性能、确保数据完整性和准确性至关重要。

MySQL 数据类型

数据类型定义了列中可以存储什么数据以及该数据怎样存储的规则。

数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据。例如,列中存储的为数字,则相应的数据类型应该为数值类型。

如果使用错误的数据类型可能会严重影响应用程序的功能和性能,所以在设计表时,应该特别重视数据列所用的数据类型。更改包含数据的列不是一件小事,这样做可能会导致数据丢失。因此,在创建表时必须为每个列设置正确的数据类型和长度。

MySQL 的数据类型有大概可以分为 5 种,分别是

  • 整数类型
  • 小数类型 (浮点数类型、定点数类型)
  • 日期和时间类型
  • 文本字符串类型
  • 二进制类(二进制字符串)

定义字段的数据类型对数据库的优化是十分重要的

数值类型

整数类型和浮点数类型可以统称为数值数据类型

整数类型

整数类型又称数值型数据,数值型数据类型主要用来存储数字。

MySQL提供了多种数值型数据类型,不同的数据类型提供不同的取值范围,可以存储的值范围越大,所需的存储空间也会越大。

MySQL 主要提供的整数类型有 TINYINTSMALLINTMEDIUMINTINTBIGINT,其属性字段可以添加 AUTO_INCREMENT 自增约束条件。

类型名称范围(有符号)范围(无符号)内存占据
TINYINT-128〜127
(很小的整数)
0 〜2551 bytes
SMALLINT-32768〜32767
(小的整数)
0〜655352 bytes
MEDIUMINT-8388608〜8388607
(中等大小的整数)
0〜167772153 bytes
INT(INTEGER)-2147483648〜2147483647
(普通大小的整数)
0〜42949672954 bytes
BIGINT-92233720368547758〜9223372036854775807
(大整数)
0〜184467440737095516158 bytes

显示宽度和数据类型的取值范围是无关的显示宽度只是指明 MySQL 最大可能显示的数字个数,数值的位数小于指定的宽度时会由空格填充。
如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。
例如,year 字段插入 19999,当使用 SELECT 查询该列值的时候,MySQL 显示的将是完整的带有 5 位数字的 19999,而不是 4 位数字的值。

小数类型

Mysql 中使用 浮点数定点数 来表示小数。

浮点类型有两种,分别是单精度浮点数(FLOAT)和双精度浮点数(DOUBLE);

定点类型只有一种,就是 DECIMAL

浮点类型和定点类型都可以用 (M, D) 来表示,其中 M 称为 精度,表示总共的位数(显示宽度)D称为 标度,表示小数的位数

浮点数类型的取值范围为 M(1~255)D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。

M 和 D 在 FLOATDOUBLE 中是可选的,FLOATDOUBLE 类型将被保存为硬件所支持的最大精度。

DECIMAL 的默认 D 值为 0、M 值为 10。

类型名称说明存储需求
FLOAT单精度浮点数4 bytes
DOUBLE双精度浮点数8 bytes
DECIMAL(M, D), DEC压缩的“严格”定点数M+2 bytes

FLOAT 类型的取值范围如下:

  • 有符号的取值范围:-3.402823466E+38~-1.175494351E-38。

  • 无符号的取值范围:0、 -1.175494351E-38 ~-3.402823466E+38。

DOUBLE 类型的取值范围如下:

  • 有符号的取值范围:-1.7976931348623157E+308~-2.2250738585072014E-308。

  • 无符号的取值范围:0 和 -2.2250738585072014E-308~-1.7976931348623157E+308。

DECIMAL 可能的最大取值范围与 DOUBLE 相同,但是有效的取值范围由 M 和 D 决定。如果改变 M 而固定 D,则取值范围将随 M 的变大而变大

不论是定点还是浮点类型,如果用户指定的精度超出精度范围,则会四舍五入进行处理。

FLOAT 和 DOUBLE 在不指定精度时,默认会按照实际的精度(由计算机硬件和操作系统决定),DECIMAL 如果不指定精度,默认为(10,0)。

浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的范围;缺点是会引起精度问题。

在对精度要求比较高的时候(如货币、科学数据),使用 DECIMAL 的类型比较好,另外两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。

日期和时间类型

在MySQL中,有多处表示日期的数据类型:YEARTIMEDATEDTAETIMETIMESTAMP

每一个类型都有合法的取值范围,当指定不合法的MySQL无法表示的值时,系统将“零”值插入数据库中

类型范围格式用途存储
YEAR1901~2155YYYY年份值1 bytes
DATE1000-01-01~9999-12-31YYYY-MM-DD日期值3 bytes
TIME‘-838:59:59’~‘838:59:59’HH:MM:SS时间值或持续时间3 bytes
DATETIME‘1000-01-01 00:00:00’ ~ ‘9999-12-31 23:59:59’YYYY-MM-DD hh:mm:ss混合日期和时间值8 bytes
TIMESTAMP‘1970-01-01 00:00:01’ UTC ~ ‘2038-01-19 03:14:07’ UTCYYYY-MM-DD hh:mm:ss混合日期和时间值,时间戳4 bytes
YEAR类型

YEAR 类型是一个单字节类型,用于表示年,在存储时只需要 1 个字节。可以使用各种格式指定 YEAR,如下所示:

  • 4 位字符串或者 4 位数字格式表示的 YEAR,范围为 ‘1901’~’2155’。输入格式为 ‘YYYY’ 或者 YYYY,例如,输入 ‘2010’ 或 2010,插入数据库的值均为 2010。

  • 2 位字符串格式表示的 YEAR,范围为 ‘00’ 到 ‘99’。‘00’~’69’ 和 ‘70’~’99’ 范围的值分别被转换为 2000~2069 和 1970~1999 范围的 YEAR 值。‘0’ 与 ‘00’ 的作用相同。插入超过取值范围的值将被转换为 2000

  • 2 位数字表示的 YEAR,范围为 1~99。1~99 和 70~99 范围的值分别被转换为 2001~2069 和 1970~1999 范围的 YEAR 值。注意,在这里 0 值将被转换为 0000,而不是 2000。

两位整数范围与两位字符串范围稍有不同。例如,插入 3000 年,读者可能会使用数字格式的 0 表示 YEAR,实际上,插入数据库的值为 0000,而不是所希望的 3000。只有使用字符串格式的 ‘0’ 或 ‘00’,才可以被正确解释为 3000,非法 YEAR值将被转换为 0000。

TIME 类型

TIME 类型用于只需要时间信息的值,在存储时需要 3 个字节。格式为 **HH:MM:SS。HH 表示小时,MM 表示分钟,SS 表示秒 。

TIME 类型的取值范围为 -838:59:59~838:59:59,小时部分如此大的原因是 TIME 类型不仅可以用于表示一天的时间(必须小于 24 小时),还可能是某个事件过去的时间或两个事件之间的时间间隔(可大于 24 小时,或者甚至为负)。

可以使用各种格式指定 TIME 值,如下所示。

  • 'D HH:MM:SS' 格式的字符串。还可以使用这些“非严格”的语法:
    'HH:MM:SS''HH:MM''D HH''SS'。这里的 D 表示日,可以取 0~34 之间的值。在插入数据库时,D 被转换为小时保存,格式为 “Dx24+HH”

  • 'HHMMSS' 格式、没有间隔符的字符串或者 HHMMSS 数字格式的数值,假定是有意义的时间。例如,‘101112’ 被理解为’10:11:12’,但是 ‘106112’ 是
    不合法的(它有一个没有意义的分钟部分),在存储时将变为 00:00:00。

为 TIME 列分配简写值时应注意:如果没有冒号,MySQL 解释值时,假定最右边的两位表示秒。(MySQL 解释 TIME 值为过去的时间而不是当前的时间)。

例如,读者可能认为 ‘1112’ 和 1112 表示 11:12:00(即 11 点过 12 分钟),但MySQL 将它们解释为 00:11:12(即 11 分 12 秒)。同样 ‘12’ 和 12 被解释为00:00:12。相反,TIME 值中如果使用冒号则肯定被看作当天的时间,也就是说,‘11:12’ 表示 11:12:00,而不是 00:11:12

DATE类型

DATE 类型用于仅需要日期值时,没有时间部分,在存储时需要 3 个字节。日期格式为 ‘YYYY-MM-DD’,其中 YYYY 表示年,MM 表示月,DD 表示日

在给 DATE 类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合 DATE 的日期格式即可。

  • 'YYYY-MM-DD' 或者 'YYYYMMDD' 字符串格式表示的日期,取值范围为 ‘1000-01-01’~’9999-12-3’。例如,输入 ‘2015-12-31’ 或者 ‘20151231’,插入数据库的日期为2015-12-31。

  • 'YY-MM-DD' 或者 'YYMMDD'字符串格式表示日期,在这里YY表示两位的年值。MySQL 解释两位年值的规则:‘00~69’ 范围的年值转换为 ‘20002069’*,*'7099’ 范围的年值转换为 ‘1970~1999’
    例如,输入 ‘15-12-31’,插入数据库的日期为 2015-12-31;
    输入 ‘991231’,插入数据库的日期为 1999-12-31。

  • YYMMDD 数字格式表示的日期,与前面相似,00~69 范围的年值转换为 2000~2069,70~99 范围的年值转换为 1970~1999。
    例如,输入 151231,插入数据库的日期为 2015-12-31,输入 991231,插入数据库的日期为 1999-12-31。

  • 使用 CURRENT_DATE 或者 NOW(),插入当前系统日期。

MySQL 允许“不严格”语法:任何标点符号都可以用作日期部分之间的间隔符例如,‘98-11-31’、‘98.11.31’、‘98/11/31’和’98@11@31’ 是等价的,这些值也可以正确地插入数据库。

DATETIME 类型

DATETIME 类型用于需要同时包含日期和时间信息的值,在存储时需要 8 个字节。日期格式为 'YYYY-MM-DD HH:MM:SS',其中 YYYY 表示年,MM 表示月,DD 表示日,HH 表示小时,MM 表示分钟,SS 表示秒。

在给 DATETIME 类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合 DATETIME 的日期格式即可,如下所示。

  • 'YYYY-MM-DD HH:MM:SS' 或者 'YYYY-MM-DD HH:MM:SS' 字符串格式表示的日期,取值范围为 ‘1000-01-01 00:00:00’~’9999-12-3 23:59:59’。
    例如,输入 ‘2014-12-31 05:05:05’ 或者 '20141231050505’,插入数据库的 DATETIME 值都为 2014-12-31 05:05:05。

  • 'YY-MM-DD HH:MM:SS' 或者 'YY-MM-DD- HH:MM:SS' 字符串格式表示的日期,在这里 YY 表示两位的年值。与前面相同,‘00~79’ 范围的年值转换为 ‘2000~2079’‘80~99’ 范围的年值转换为 ‘1980~1999’
    例如,输入 ‘14-12-31 05:05:05’,插入数据库的 DATETIME 为 2014-12-31 05:05:05;输入 141231050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05。

  • YYYY-MM-DD HH:MM:SS 或者 YY-MM-DD- HH:MM:SS 数字格式表示的日期和时间。
    例如,输入 20141231050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05;输入 140505050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05。

MySQL 允许“不严格”语法:任何标点符号都可用作日期部分或时间部分之间的间隔符。
例如,‘98-12-31 11:30:45’、‘98.12.31 11+30+35’、‘98/12/31 11%30%45’ 和 ‘98@12@31 113045’ 是等价的,这些值都可以正确地插入数据库。

TIMESTAMP类型

TIMESTAMP 的显示格式与 DATETIME 相同,显示宽度固定在 19 个字符,日期格式为 YYYY-MM-DD HH:MM:SS,在存储时需要 4 个字节。

但是 TIMESTAMP 列的取值范围小于 DATETIME 的取值范围,为 ‘1970-01-01 00:00:01’ UTC ~ ‘2038-01-19 03:14:07’ UTC 。在插入数据时,要保证在合法的取值范围内。

协调世界时(英:Coordinated Universal Time,法:Temps Universel Coordonné)又称为世界统一时间、世界标准时间、国际协调时间。英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称 UTC。

TIMESTAMPDATETIME 除了存储字节和支持的范围不同外,还有一个最大的区别是:

  • DATETIME 在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关

  • TIMESTAMP 值的存储是以 UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的

如果为一个 DATETIME 或 TIMESTAMP 对象分配一个 DATE 值,结果值的时间部分被设置为 ‘00:00:00’,因此 DATE 值未包含时间信息。
如果为一个 DATE 对象分配一个 DATETIME 或 TIMESTAMP 值,结果值的时间部分被删除,因此DATE 值未包含时间信息。

文本字符串类型

字符串类型用来存储文本字符串数据,还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比较,还可以进行正则表达式的匹配查找。

存储和检索大型文本数据可能会对数据库的性能和资源消耗产生影响。在处理文本数据时,需要合理使用和管理存储空间,以及通过适当的方式处理和优化查询操作。

MySQL中的文本字符串类型有 CHARVARCHARTINYTEXTTEXTMEDIUMTEXTLONGTEXTENUMSET 等。

M 可以为其指定字节

类型名称说明存储需求
CHAR(M)固定长度非二进制字符串M 字节,1<=M<=255
VARCHAR(M)变长非二进制字符串L+1字节,在此,L< = M和 1<=M<=255
TINYTEXT非常小的非二进制字符串L+1字节,在此,L<2^8
TEXT小的非二进制字符串L+2字节,在此,L<2^16
MEDIUMTEXT中等大小的非二进制字符串L+3字节,在此,L<2^24
LONGTEXT大的非二进制字符串L+4字节,在此,L<2^32
ENUM枚举类型,只能有一个枚举字符串值1或2个字节,取决于枚举值的数目 (最大值为65535)
SET一个设置,字符串对象可以有零个或 多个SET成员1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员)

VARCHARTEXT 类型是变长类型,其存储需求取决于列值的实际长度(在前面的表格中用 L 表示),而不是取决于类型的最大可能尺寸。

例如,一个 VARCHAR(10) 列能保存一个最大长度为 10 个字符的字符串,实际的存储需要字符串的长度 L 加上一个字节以记录字符串的长度。对于字符 “abcd”,L 是 4,而存储要求 5 个字节。

CHAR和VARCHAR类型

CHAR(M)固定长度字符串,在定义时指定字符串列长。当保存时,在右侧填充空格以达到指定的长度。M 表示列的长度,范围是 0~255 个字符。

例如,CHAR(4) 定义了一个固定长度的字符串列,包含的字符个数最大为 4。无论存入数据的长度为多少,所占用的空间均为4字节。当检索到 CHAR 值时,尾部的空格将被删除。

VARCHAR(M)长度可变的字符串,M 表示最大列的长度,M 的范围是 0~65535。VARCHAR 的最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加 1

例如,VARCHAR(50) 定义了一个最大长度为 50 的字符串,如果插入的字符串只有 10 个字符,则实际存储的字符串为 10 个字符和一个字符串结束字符,此时占用的空间为 11 字节;如果插入的字符串只有 4 个字符,那么此时占用的空间为 5 字节。
VARCHAR 在值保存和检索时尾部的空格仍保留。

TEXT 类型

TEXT 列保存非二进制字符串,如文章内容、评论等。当保存或查询 TEXT 列的值时,不删除尾部空格。

TEXT 类型分为 4 种:TINYTEXT、TEXT、MEDIUMTEXTLONGTEXT。不同的 TEXT 类型的存储空间和数据长度不同。

  • TINYTEXT 表示长度为 255(28-1)字符的 TEXT 列。

  • TEXT 表示长度为 65535(216-1)字符的 TEXT 列。

  • MEDIUMTEXT 表示长度为 16777215(224-1)字符的 TEXT 列。

  • LONGTEXT 表示长度为 4294967295 或 4GB(232-1)字符的 TEXT 列。

ENUM类型

ENUM 是一种用于存储枚举值的数据类型。枚举值指的是一组有限的可能选项,可以在列定义时指定这些选项,并且每个列只能存储这些指定的枚举值之一。如果创建的成员中有空格,尾部的空格将自动被删除。

ENUM 类型的字段在取值时,能在指定的枚举列表中获取,而且一次只能取一个。

枚举值为表创建时列规定中枚举的一列值。其语法格式如下:

<字段名> ENUM( '值1', '值1',, '值n' )
# 字段名指将要定义的字段,值 n 指枚举列表中第 n 个值。CREATE TABLE example (status ENUM('active', 'inactive', 'pending')
);

ENUM 列插入数据时,只能为列赋予定义的枚举值之一。例如:

INSERT INTO example (status) VALUES ('active');
INSERT INTO example (status) VALUES ('pending');# 查询包含ENUM列的数据时,返回的结果将显示存储的枚举值

如果尝试插入一个不在定义的枚举选项内的值,将会引发错误

ENUM 值在内部用整数表示,每个枚举值均有一个索引值;列表值所允许的成员值从 1 开始编号,MySQL 存储的就是这个索引编号,枚举最多可以有 65535 个元素。

例如,定义 ENUM 类型的列(‘first’,‘second’,‘third’):

索引
Nullnull
“”0
first1
second2
third3

ENUM 值依照列索引顺序排列,并且空字符串排在非空字符串前,NULL 值排在其他所有枚举值前。

ENUM 列总有一个默认值。如果将 ENUM 列声明为 NULLNULL 值则为该列的一个有效值,并且默认值为 NULL
如果 ENUM 列被声明为 NOT NULL,其默认值为允许的值列表的第 1 个元素

ENUM 列虽然提供了一种存储固定选项的方式,但它也有一些限制。添加新的枚举选项或者重新排序现有的选项需要执行ALTER TABLE语句,这可能会引起某些操作的复杂性。

SET类型

SET 是一种用于存储一组可选值的数据类型。允许从一个预定义的值集合中选择零个或多个值,并将其作为一组位标志存储在列中,SET最多可以有 64 个成员,值为表创建时规定的一列值。

语法格式如下:

SET( '值1', '值2',, '值n' )CREATE TABLE example (colors SET('red', 'green', 'blue')
);

使用 INSERTUPDATE 语句向 SET 列插入数据时,与 ENUM 列不同的是:
可以选择一个或多个列选项。多个选项应以逗号分隔。例如:

INSERT INTO example (colors) VALUES ('red');
INSERT INTO example (colors) VALUES ('red,green');# 查询包含SET列的数据时,返回的结果将显示存储的选项
# 还可以使用LIKE运算符进行SET列的模糊匹配查询

ENUM 类型相同,SET 值在内部用整数表示,列表中每个值都有一个索引编号。当创建表时,SET 成员值的尾部空格将自动删除。

如果插入 SET 字段中的列值有重复,则 MySQL 自动删除重复的值;插入 SET 字段的值的顺序并不重要,MySQL 会在存入数据库时,按照定义的顺序显示;如果插入了不正确的值,默认情况下,MySQL 将忽视这些值,给出警告

SET 类型有一些限制,例如SET列在存储和检索数据时会有一些额外的复杂性,并且在定义列后更改选项集可能会使用 ALTER TABLE 语句来进行更改。

二进制类

二进制类型可以用于存储各种二进制数据,例如图像、音频、视频、文档等

MySQL 中的二进制字符串(有时也被直接成为二进制类型)有 BITBINARYVARBINARYTINYBLOBBLOBMEDIUMBLOBLONGBLOB

m 表示可以为其指定长度

类型名称说明存储需求
BIT(M)位字段类型大约 (M+7)/8 字节
BINARY(M)固定长度二进制字符串M 字节
VARBINARY (M)可变长度二进制字符串M+1 字节
TINYBLOB (M)非常小的BLOBL+1 字节,在此,L<2^8
BLOB (M)小 BLOBL+2 字节,在此,L<2^16
MEDIUMBLOB (M)中等大小的BLOBL+3 字节,在此,L<2^24
LONGBLOB (M)非常大的BLOBL+4 字节,在此,L<2^32
BIT 类型

BIT 是一种用于存储位(bit)值的数据类型。BIT 类型可以存储二进制位的序列,其中每个位可以是0或1。

查询包含BIT列的数据时,返回的结果将显示存储的位(bit)值

BIT 类型有两种形式:固定长度的BIT(M)可变长度的BIT

  1. 固定长度的BIT(M):表示具有固定长度 M 的位(bit)序列。在创建表时,需要指定位序列的长度 M ,范围可以是 1~64 。
# 创建一个固定长度为8的位(BIT)列
CREATE TABLE example (flags BIT(8)
);

如果为 BIT(M) 列分配的值的长度小于 M 位,在值的左边用 0 填充。例如,为 BIT(6) 列分配一个值 b’101’,其效果与分配 b’000101’ 相同。

  1. 变长度的BIT:表示可以存储不定长度位(bit)序列的数据类型。这意味着可以根据需要存储不同长度的位(bit)序列。
# 创建一个可变长度的位列
CREATE TABLE example (data BIT
);

BIT 数据类型用来保存位字段值
例如: 以二进制的形式保存数据 13,13 的二进制形式为 1101,在这里需要位数至少为 4 位的 BIT 类型,即可以定义列类型为 BIT(4)。
大于二进制 1111 的数据是不能插入 BIT(4) 类型的字段中的。

默认情况下,MySQL 不可以插入超出该列允许范围的值,因而插入数据时要确保插入的值在指定的范围内。

需要注意的是,BIT类型主要用于存储小的位(bit)序列,例如存储布尔值或使用位掩码表示多个选项的情况。对于存储较大的位序列,可能需要考虑使用BLOB或其他适当的数据类型。

BINARY 和 VARBINARY 类型

BINARYVARBINARY 类型类似于 CHARVARCHAR,不同的是它们包含二进制字节字符串。

语法格式如下:

列名称 BINARY(M) 或者 VARBINARY(M)
  1. BINARY类型用于存储固定长度的二进制数据。在创建表时,需要指定BINARY列的长度,范围可以是 1~255。
    指定长度后,不足最大长度的,将在它们右边填充 “\0” 补齐,以达到指定长度。

  2. VARBINARY类型用于存储可变长度的二进制数据。VARBINARY列可以存储不同长度的二进制数据,根据实际需要分配所需的空间,实际占用的空间字符串的实际长度+1

CREATE TABLE example(data BINARY(3)
);INSERT INTO example (data) VALUES ('a');
# 插入后的列值将会是:01100001 00000000 (总共3个字节),前面是字符 ‘a’ 的二进制表示,后面被填充了一个字节的0CREATE TABLE example(data VARBINARY(255)
);
BLOB 类型

BLOB(Binary Large Object) 是一种在数据库中存储 大量 二进制数据的数据类型。在MySQL中,BLOB用于存储 大型可变数量 的非结构化二进制数据,例如图像、音频、视频、文档等。

数据类型存储范围
TINY BLOB最大长度为255 (28-1) bytes
BLOB最大长度为65535 (216-1) bytes
MEDIUM BLOB最大长度为16777215 (224-1) bytes
LONG BLOB最大长度为4294967295或4GB (231-1) bytes

BLOB列存储的是二进制字符串(字节字符串)。BLOB 列是字符集,且排序和比较基于列值字节的数值;

TEXT 列存储的是非进制字符串(字符字符串)。TEXT 列有一个字符集,且根据字符集对值进行排序和比较。

需要注意的是,存储和检索大型BLOB数据可能会对数据库的性能和资源消耗产生影响。在处理 BLOB 类型数据时,通常建议合理使用和管理存储空间,以及通过适当的方式处理和优化查询操作。

特殊类型

在数据库中,NULL 是一个特殊的值,表示缺失或未知的数据。它表示某个字段或列没有具体的值。

以下是关于 NULL 的一些重要事项:

  • NULL 不等于任何值,包括它自己。所以,NULL = NULL 的比较结果是 NULL,而不是 truefalse

  • 在条件比较中,可以使用 IS NULLIS NOT NULL 来判断字段或列是否为 NULL

  • NULL 值可以在数据库表中出现,它表示该字段在特定行中没有具体的值。

  • NULL 不是空字符串(''),它表示一个缺失的值,而空字符串是一个有效的字符串。

  • 在进行各种计算和操作时,与 NULL 相关的结果通常为 NULL

对于包含 NULL 值的列,需要特别小心处理,确保查询和计算不产生意外的结果。可以使用 IFNULL()COALESCE() 函数来处理 NULL 值,提供默认值或进行转换。

MySQL 数据类型的选择

MySQL 提供了大量的数据类型,为了优化存储和提高数据库性能,在任何情况下都应该使用最精确的数据类型。

字符串类型是通用的数据类型,任何内容都可以保存在字符串中,数字和日期都可以表示成字符串形式。

但是也不能把所有的列都定义为字符串类型。对于数值类型,如果把它们设置为字符串类型的,会使用很多的空间。用字符串类型存储数字相较于使用数值类型存储而言效率较为低下

另外需要注意的是,由于对数字和字符串的处理方式不同,查询结果也会存在差异。

例如,对数字的排序与对字符串的排序是不一样的:

数字 2 小于数字 11,但字符串 ‘2’ 却比字符串 ‘11’ 大。此问题可以通过把列放到数字上下文中来解决,如下面 SQL 语句:

SELECT course+ 0 as num ... ORDER BY num;

让 course 列加上 0,可以强制列按数字的方式来排序,但这么做很明显是不合理的。

如果让 MySQL 把一个字符串列当作一个数字列来对待,会迫使让列里的每一个值都执行从字符串到数字的转换,操作效率低。

而且在计算过程中使用这样的列,会导致 MySQL 不会使用这些列上的任何索引,从而进一步降低查询的速度

在选择数据类型时,首先要考虑这个列存放的值是什么类型的。一般来说,用
数值类型列存储数字、用字符类型列存储字符串、用时态类型列存储日期和时间

数值类型

如果要存储的数字是整数(没有小数部分),则使用[[数值类型#整数类型|整数类型]]

  • 如果列的取值范围是 1~99999 之间的整数,则UNSIGNED MEDIUMINT类型是最好的选择
CREATE TABLE exmple(num UNSIGNED MEDIUMINT
);
  • 根据实际所需取值范围来选择适用的整数类型,选取合适的存储来提升效率

如果要存储的数字是[[数值类型#小数类型|小数类型]](带有小数部分),则可以选用DECIMAL或浮点类型,但是一般选择FLOAT类型(浮点类型的一种)。

正确选择数据类型,不仅可以使表的存储空间变小,也会提高性能。因为与较长的列相比,较短的列的处理速度更快。当读取较短的值时,所需的磁盘读写操作会更少,并且可以把更多的键值放入内存索引缓冲区里

如果无法获知各种可能值的范围,将来,还可以使用ALTER TABLE让该列变得更大些。

实际问题

如果数值类型需要存储的数据为货币,如人民币。在计算时,使用到的值常带有元和分两个部分。它们看起来像是浮点值,但 FLOAT 和 DOUBLE 类型都存在四舍五入的误差问题

把货币表示成 DECIMAL(M,2) 类型,其中 M 为所需取值范围的最大宽度。这种类型的数值可以精确到小数点后 2 位。DECIMAL 的优点在于不存在舍入误差,计算是精确的

对于电话号码、信用卡号和社会保险号都会使用非数字字符。由于空格和短划线不能直接存储到数字类型列里,除非去掉其中的非数字字符。但即使去掉了其中的非数字字符,也不能把它们存储成数值类型,以避免丢失开头的“零”。

日期和时间类型

如果同时需要记录日期和时间,则可以使用TIMESTAMP或者DATETIME类型。存储较大的日期最好使用 DATETIME

默认情况下,当插入一条记录但并没有指定 TIMESTAMP 这个列值时,MySQL 会把 TIMESTAMP 列设为当前的时间。因此当需要插入记录和当前时间时,使用 TIMESTAMP 是方便的,另外 TIMESTAMP 在空间上比 DATETIME 更有效。

MySQL 没有提供时间部分为可选的日期类型。如果时间部分是可选的,那么可以使用 DATE 列来记录日期,再用一个单独的 TIME 列来记录时间。然后,设置 TIME 列可以为 NULL。

CREATE TABLE example(date DATE NOT NULL,  # 日期必需time TIME NULL       # 时间可选(可为NULL)
);

字符串类型

  • 如果某个字符串列用于表示某种固定集合的值,那么可以考虑使用数据类型。ENUM(多个值中选取一个时) 或 SET(需要选取多个值时)。

  • CHAR 是固定长度,所以它的处理速度比 VARCHAR 的速度要快,但是它的缺点就是浪费存储空间。所以对存储不大,但在速度上有要求的可以使用 CHAR 类型,反之可以使用 VARCHAR类型来实现。

  • 对于 MyISAM 存储引擎,最好使用固定长度的数据列代替可变长度的数据列。这样可以使整个表静态化,从而使数据检索更快,用空间换时间

  • 对于 InnoDB 存储引擎,最好使用可变长度的数据列,因为 InnoDB 数据表的存储格式不分固定长度和可变长度,因此使用 CHAR 不一定比使用 VARCHAR 更好,但由于 VARCHAR 是按照实际的长度存储,比较节省空间,所以对磁盘 I/O 和数据存储总量比较好

二进制类型

BLOB 是二进制字符串,TEXT 是非二进制字符串,两者均可存放大容量的信息。BLOB 主要存储图片、音频信息等,而TEXT 只能存储纯文本文件

总结

正确选择和使用 MySQL 中的数据类型对于提高数据库性能、确保数据准确性和完整性至关重要。在选择数据类型时,需要根据业务需求和数据特性来决定,避免使用过于复杂或不必要的数据类型。同时,了解每种数据类型的优缺点和使用场景,可以帮助我们更好地设计和优化数据库结构。

相关文章:

MySQL:mysql的数据类型

MySQL 作为一个流行的关系型数据库管理系统&#xff0c;支持多种数据类型以满足不同的数据处理和存储需求。正确理解和使用这些数据类型对于提高数据库性能、确保数据完整性和准确性至关重要。 MySQL 数据类型 数据类型定义了列中可以存储什么数据以及该数据怎样存储的规则。…...

IPython魔法命令的深入应用

目录 IPython魔法命令的深入应用 一、魔法命令基础 1. 魔法命令的分类 2. 基本使用 二、高级应用技巧 1. 数据交互与处理 2. 交互式编程与调试 三、魔法命令的进阶操作 1. 自定义魔法命令 2. 利用魔法命令优化工作流程 四、总结与展望 IPython魔法命令的深入应用 IP…...

Yum包下载

1. 起因 内网有一台服务器需要升级php版本,维护的同学又不想二进制安装.服务器只有一个光盘的yum仓库 2. 解决方法 解决思路如下: 外网找一台机器配置php8.3.8的仓库外网服务器下载软件集并打包内网服务器上传并解压实现升级 2.1 下载php8.3.8仓库 配置php仓库 rootcent…...

数据结构代码

文章目录 线性表的插入线性表的删除单链表的建立栈的顺序存储队列的顺序存储串的顺序存储树的存储二叉树遍历前序遍历中序遍历后序遍历 二分法插入排序利用普里姆算法构造最小生成树 线性表的插入 #a: 列表&#xff0c;pos: 要插入的位置&#xff0c;key: 要插入的数据&#x…...

环信IM x 亚马逊云科技,助力出海企业实现可靠通讯服务

随着全球化进程的加速&#xff0c;越来越多的企业选择出海&#xff0c;拓展国际市场。然而&#xff0c;面对不同国家和地区的用户&#xff0c;企业在即时通讯方面遇到了诸多挑战。为了帮助企业克服这些困难&#xff0c;环信IM与亚马逊云科技强强联手&#xff0c;共同推出了一套…...

R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-等高线图-曲线图-热力图-雷达图-韦恩图(二D)

R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-等高线图-曲线图-热力图-雷达图-韦恩图&#xff08;二D&#xff09; 散点图示例解析效果 饼图示例解析效果 折线图示例解析效果 柱状图示例解析效果 箱线图示例解析效果 直方图示例解析效果 等高线图使用filled.contour函数示例…...

go中map

文章目录 Map简介哈希表与Map的概念Go语言内建的Map类型Map的声明Map的初始化Map的访问Map的添加和修改Map的删除Map的遍历 Map的基本使用Map的声明与初始化Map的访问与操作Map的删除Map的遍历Map的并发问题实现线程安全的Map 3. Map的访问与操作3.1 访问Map元素代码示例&#…...

02-用户画像-技术架构+业务划分

技术架构 python开发 es flume 流数据读取写入kafka文件 kafka 消息队列 sqoop 将数据导入数仓hive StructureStream 动态画像的处理 SparkSQL 静态画像的处理 &#xff0c;批数据处理 读取kafka获取用户行为数据 fineBI 数据展示 业务划分 离线业务 静态画像 …...

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号1

本来打算找到工作再整理高级的题库&#xff0c;但一直没什么面试机会。宅在家里也不知道干些什么。索性就把高级的题库整理出来了。也算有头有尾。高级的题库更新之后&#xff0c;专业性更强了&#xff0c;不是真正从事这一行的&#xff0c;很难做出来。本人就是个小菜鸡&#…...

敲详细的springboot中使用RabbitMQ的源码解析

这里介绍的源码主要是涉及springboot框架下的rabbitmq客户端代码&#xff08;具体在springframework.amqp.rabbit包下&#xff0c;区分一下不由springboot直接接管的spring-rabbit的内容&#xff09;&#xff0c;springboot基于RabbitMQ的Java客户端建立了简便易用的框架。 sp…...

《Nginx核心技术》第04章:生成缩略图

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…...

Web 3.0革新:社交金融与边玩边赚开启用户数据主权时代

目录 Web 3.0与社交商业模式 传统社交平台的问题 去中心化社交创新 Mirror&#xff1a;去中心化内容发布平台 Lens Protocol&#xff1a;去中心化社交图谱 Maskbook&#xff1a;隐私保护的社交方式 Web 3.0与与边玩边赚模式 经济模型解析 新商业模式的探索 Axie Infi…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 中文分词模拟器(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…...

Cisco 路由重发布 —— 实现路由信息在不同路由域间的传递

一、技术背景 在实际的组网中&#xff0c;可能会遇到这样一个场景&#xff1a;在一个网络中同时存在两种或者两种以上的路由协议。例如客户的网络原先是纯 Cisco 的设备&#xff0c;使用 EIGRP 协议将网络的路由打通。但是后来网络扩容&#xff0c;增加了一批华为的设备&#…...

mysql8和mysql5版本在使用mybatis框架时的注意事项

mysql8和mysql5版本在使用mybatis框架时有些注意事项&#xff0c;两者的区别在于两处地方的设置。有一处未设置好&#xff0c;就会出现以下错误&#xff1a;java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Can…...

为什么要有指针和引用类型?

简单说&#xff0c;是为了必要的&#xff0c;且很基础的表达能力 &#xff08;描述能力&#xff09;。 0. 数据四要素&#xff1a;名、值、址、型 指针、引用的基础&#xff0c;就是在描述一个数据时&#xff0c;除了这个数据的“值”以外&#xff0c;引入了这个数据的“地址…...

vivado INTERNAL_VREF

内部 具有差分输入缓冲器的单端I/O标准需要输入参考 电压&#xff08;VREF&#xff09;。当I/O组中需要VREF时&#xff0c;您可以使用专用VREF 引脚作为外部VREF电源&#xff0c;或使用INTERNAL_VREF内部生成的VREF 属性&#xff0c;或者对于UltraScale设备上的HP I/O组&#x…...

VScode通过Graphviz插件和dot文件绘制层次图,导出svg

1、安装插件 在VScode中安装Graphviz Interactive Preview插件&#xff0c;参考。 2、创建dot文件 在本地创建一个后缀为dot的文件&#xff0c;如test.dot&#xff0c;并写入以下内容&#xff1a; digraph testGraph {label "层次图";node [shape square; widt…...

MMCV 核心组件分析(一):整体概述

概述 MMCV 是计算机视觉研究的基础库&#xff0c;并提供以下功能。...

阵列信号处理学习笔记(一)--阵列信号处理定义

阵列信号 阵列信号处理学习笔记&#xff08;一&#xff09;–阵列信号处理定义 阵列信号处理学习笔记&#xff08;二&#xff09;–空域滤波基本原理 文章目录 阵列信号前言一、阵列信号处理定义1.1 信号1.2 阵列 二、雷达数据中哪些属于空间采样总结 前言 MOOC 阵列信号处理…...

[HTML]一文掌握

背景知识 主流浏览器 浏览器是展示和运行网页的平台&#xff0c; 常见的五大浏览器有 IE浏览器、火狐浏览器&#xff08;Firefox&#xff09;、谷歌浏览器&#xff08;Chrome&#xff09;、Safari浏览器、欧朋浏览器&#xff08;Opera&#xff09; 渲染引擎 浏览器解析代码渲…...

ABAP使用SQL直接更新数据库与使用IN UPDATE TASK的区别

1. 背景 刚接触ABAP的小伙伴常常会有这样的疑问&#xff0c;为什么不直接使用Open SQL直接更新数据库&#xff0c;而要把对DB的操作封装到IN UPDATE TASK中呢&#xff1f; 对于这个问题&#xff0c;比较常见的解释是&#xff0c;IN UPDATE TASK的方式会保证数据更新的一致性。…...

Android GWP-Asan使用与实现原理

目录 一、 背景 二、GWP-Asan介绍 2.1 什么是GWP-ASan 2.2 GWP-Asan与其他几类工具对比 2.3 GWP-ASan与其它内存分配器的兼容性 三、GWP-Asan如何使用 3.1 app进程 3.2 native进程 四、GWP-Asan实现原理 4.1 进程启用GWP-Asan 4.2 初始化 4.3 内存分配 4.3.1 内存…...

SpringBoot 跨域请求处理全攻略:从原理到实践

文章目录 SpringBoot 如何处理跨域请求&#xff1f;你能说出几种方法&#xff1f;跨域请求概述跨域解决方案1. 使用CrossOrigin注解2. 使用WebMvcConfigurer配置类3. 使用过滤器&#xff08;Filter&#xff09;4. 使用Spring Security处理CORS5.使用Spring Cloud Gateway处理CO…...

vulnhub——Ai-Web1靶机渗透

Ai-Web1靶机渗透 靶机下载&#xff1a; 官网地址&#xff1a;https://www.vulnhub.com/entry/ai-web-1,353/ 攻击机&#xff1a;kali2024 一、信息收集 发下目标主机的IP为&#xff1a;192.168.201.141 用nmap工具扫描一下对方主机和服务 发现他打开了80端口 发现搜不到于是…...

sqlalchemy事件监听

sqlalchemy事件监听 SQLAlchemy 中的事件监听允许您在特定事件发生时执行自定义的 Python 代码。这些事件可以是与ORM(对象关系映射)或核心组件相关的操作,比如表、类、会话或事务的插入、更新、删除等操作。通过事件监听,您可以实现日志记录、审计或执行业务规则等功能。…...

【Django+Vue3 线上教育平台项目实战】Celery赋能:优化订单超时处理与自动化定时任务调度

文章目录 前言⭐✨&#x1f4ab;&#x1f525;&#x1f4d6;一、Celery⭐1.基本概念及介绍:✨2.使用步骤&#x1f4ab; 二、订单超时 取消订单&#xff08;Celery&#xff09;&#x1f525;具体实现流程&#x1f4d6; 前言⭐✨&#x1f4ab;&#x1f525;&#x1f4d6; 在构建复…...

CSS3 教程

CSS3 教程 引言 CSS3&#xff0c;即层叠样式表的第三代&#xff0c;是网页设计和开发中不可或缺的技术之一。它为HTML元素提供了丰富的样式定义&#xff0c;使得网页不仅内容丰富&#xff0c;而且外观美观、交互性强。本教程将详细介绍CSS3的基础知识、高级特性以及最佳实践&…...

树与二叉树学习笔记

树与二叉树 计算机中的树树的概念树的类型 什么是二叉树二叉树&#xff1a;定义与特点二叉树&#xff1a;前序、中序、后序遍历二叉树&#xff1a;深度、广度优先遍历二叉树&#xff1a;线索化二叉树&#xff1a;序列化与反序列化 haffman树平均编码长度构建haffman树haffman树…...

消费金融系统开发回忆录

架构设计图 整个支付链路上的功能 支付系统应该有&#xff1a;账户管理、渠道管理、支付管理、对账管理、清算管理、结算管理 一笔支付订单&#xff0c;在支付系统侧就是要记录清楚&#xff0c;谁发起的、对哪个商品进行支付、通过哪个渠道支付、支付时间、支付结果等…...

org.springframework.context.ApplicationContext发送消息

1、创建消息的实体类 package com.demo;/*** 监听的实体类**/ public class EventMessage {private String name;public EventMessage(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;} }2、创建消…...

Java8-21新特性

简介 由于Java官方最近更新越来越频繁&#xff0c;而长期支持维护的版本LTS版每隔几年才推出一个&#xff0c;大规模商用的JDK只可能选择LTS版&#xff0c;因此这里只简单记录JDK8&#xff0c;11&#xff0c;17&#xff0c;21。 jdk8 Lambda表达式&#xff1a; Lambda表达式…...

NodeJS系列面试题

大家好&#xff0c;我是有用就扩散&#xff0c;有用就点赞。 有没有写过Koa中间件&#xff0c;说一下中间件原理&#xff0c;介绍下自己写过的中间件 koa本来就是一个轻量级框架&#xff0c;本身支持的功能并不多&#xff0c;功能都是通过中间件来实现不同的需求。开发者可以通…...

QXlsx读写excel

QXlsx读写excel 安装 QXlsx使用 qmake使用 CMake 基本用法1. 写入 Excel 文件2. 读取 Excel 文件 详细用法1. 设置单元格样式2. 合并单元格3. 创建图表4. 设置列宽和行高 完整示例 QXlsx 是一个用于在 Qt 应用中读写 Excel 文件的第三方库。它提供了丰富的 API&#xff0c;可以…...

昇思25天学习打卡营第13天 | mindspore 实现 ShuffleNet 图像分类

1. 背景&#xff1a; 使用 mindspore 学习神经网络&#xff0c;打卡第 13 天&#xff1b;主要内容也依据 mindspore 的学习记录。 2. 迁移学习介绍&#xff1a; mindspore 实现 ShuffleNet 图像分类&#xff1b; ShuffleNet 基本介绍&#xff1a; ShuffleNetV1 是旷视科技提…...

C语言超市管理系统UI界面

以下是部分代码。需要源码的私信 #include<easyx.h> #include<stdio.h> #include<stdlib.h>#define width 1280 #define height 840 #define font_w 35 //字体宽度 #define font_h 90 //字体高度typedef struct node {char name[100];//名字char number[1…...

BUUCTF逆向wp [MRCTF2020]Xor

第一步 查壳&#xff0c;该题是32位&#xff0c;无壳。 第二步 跟进main&#xff0c;发现反汇编不了 通过下图我们可以发现一串类似字符串的东西 第三步 我们看一下汇编 我们可以得到这些信息&#xff1a;flag的长度为27&#xff08;下面是对本条指令cmp edx 27指令的应用…...

Windows版MySQL5.7解压直用(如何卸载更换位置重新安装)

文章目录 停止mysql进程及服务迁移整个mysql文件夹删除data重启计算机重新安装 停止mysql进程及服务 net stop mysql mysqld -remove mysql迁移整个mysql文件夹 删除data 重启计算机 shutdown -r -t 0重新安装 https://blog.csdn.net/xzzteach/article/details/137723185...

详解数据结构之二叉树(堆)

详解数据结构之二叉树(堆) 树 树的概念 树是一个非线性结构的数据结构&#xff0c;它是由 n(n>0)个有限节点组成的一个具有层次关系的集合&#xff0c;它的外观形似一颗倒挂着的树&#xff0c;根朝上&#xff0c;叶朝下&#xff0c;所以称呼为树。每颗子树的根节点有且只…...

Linux----Mplayer音视频库的移植

想要播放视频音乐就得移植相关库到板子上 Mplayer移植需要依赖以下源文件&#xff1a;(从官网获取或者网上) 1、zlib-1.2.3.tar.gz &#xff1a;通用的内存空间的压缩库。 2、libpng-1.2.57.tar.gz :png格式图片的压缩或解压库 3、Jpegsrc.v9b.tar.gz : jpeg格式图片的压…...

STM32测测速---编码电机读取速度的计算

1、首先先了解一下计算的公式 速度计算&#xff1a; 轮胎每转一圈的脉冲数取决于编码器的分辨率&#xff0c;可由下面公式进行计算&#xff1a; PPR是电机的线数 以GA25-370电机为例。 图片来源&#xff1a;第四节&#xff1a;STM32定时器&#xff08;4.JGA25-370霍尔编码器…...

【已解决】服务器无法联网与更换镜像源

目录 问题描述&#xff1a; 1.修改网卡的 DNS1 和 DNS2 2.修改DNS列表 3.重启网络服务 4.切换镜像源 4.1备份原镜像源 4.2下载阿里云镜像源 4.3替换无法使用的域名 4.4刷新软件包缓存 4.5其他镜像源 5.阿里云镜像源开发者社区说明 6.阿里云DNS网址 7.DNS域名服务器…...

android11 屏蔽usb通过otg转接口外接鼠标设备

硬件平台&#xff1a;QCS6125 软件平台&#xff1a;Android11 需求&#xff1a;Android设备通过接usb转接线连接鼠标功能屏蔽。 考虑到屏蔽的层面可以从两个层面去做&#xff0c;一个是驱动层面不识别&#xff0c;一个就是Android系统层面不识别加载&#xff0c;本篇只讲后者。…...

HAL库源码移植与使用之RTC时钟

实时时钟(Real Time Clock&#xff0c;RTC)&#xff0c;本质是一个计数器&#xff0c;计数频率常为秒&#xff0c;专门用来记录时间。 普通定时器无法掉电运行&#xff01;但RTC可由VBAT备用电源供电&#xff0c;断电不断时 这里讲F1系列的RTC 可以产生三个中断信号&#xff…...

GIT命令学习 一

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️运维工程师的职责&#xff1a;监…...

VS+QT 打包可执行文件.exe

切换成release版本&#xff0c;同时更改项目属性中release配置下的各个属性&#xff0c;确保匹配 重新生成解决方案&#xff0c;将生成的.exe复制到一个空白文件夹中 执行&#xff1a; cd D:\QT\5.12.10\msvc2015_64\binwindeployqt C:\Users\DELL\Desktop\serials\MainWind…...

Android笔试面试题AI答之Activity(2)

答案仅供参考&#xff0c;大部分为文心一言AI作答 目录 1. 请介绍一下Activity 生命周期&#xff1f;1. 完全生命周期2. 可见生命周期3. 前台生命周期4. 配置更改5. 特殊场景 2. 请介绍一下横竖屏切换时Activity的生命周期变化&#xff1f;1.默认行为&#xff08;未设置androi…...

来自Transformers的双向编码器表示(BERT) 通俗解释

来自Transformers的双向编码器表示&#xff08;BERT&#xff09; 目录 1. 从上下文无关到上下文敏感2. 从特定于任务到不可知任务3. BERT&#xff1a;把两个最好的结合起来4. BERT的输入表示5. 掩蔽语言模型&#xff08;Masked Language Modeling&#xff09;6. 下一句预测&am…...

代码随想录第十六天|贪心算法(2)

目录 LeetCode 134. 加油站 LeetCode 135. 分发糖果 LeetCode 860. 柠檬水找零 LeetCode 406. 根据身高重建队列 LeetCode 452. 用最少数量的箭引爆气球 LeetCode 435. 无重叠区间 LeetCode 763. 划分字母区间 LeetCode 56. 合并区间 LeetCode 738. 单调递增的数字 总…...

花几千上万学习Java,真没必要!(二十二)

1、final关键字&#xff1a; 测试代码1&#xff1a; package finaltest.com;public class FinalBasicDemo {public static void main(String[] args) {// final修饰基本数据类型变量final int number 5;// 尝试修改number的值&#xff0c;这将导致编译错误// number 10; // …...